小记录:
1.DBFirst 先有DB 利用DB生成 .edmx文件 (生成的东西 代码繁杂 )
2.ModelFirst 和 DBFisrt相反的一种模式 ,现有 直接在VS里面 建模型 然后生成库, 生成时 要执行SQL 语句才会生效
3.CodeFisrt (2种模式-)
3.1 利用DB 生成 干净的 对应库的 类 (这种最推荐 干净 简洁 可以 通过 类的 属性映射 指定重新 指定表名 列名 等属性)
3.2 利用类生成数据库
注:CodeFirst+EF时 如何保证EFDbContext 上下文唯一,这个是关键
第一种:经典写法,对应的使用数据查询时 就是使用using(){}
public CodeFirstDBEntitiesDbContext() : base("name=CodeFirstDBEntities"){
}
第二种:利用数据槽的方式,看到很多企业级项目这么用:
来源参考:https://blog.csdn.net/q646926099/article/details/52384233
public static DbContext GetCurrentDbContext(){
//CallContext:是线程内部唯一的独用的数据槽(一块内存空间)
//传递DbContext进去获取实例的信息,在这里进行强制转换。
DbContext dbContext = CallContext.GetData("DbContext") as DbContext;
if (dbContext == null) //线程在内存中没有此上下文
{
//如果不存在上下文 创建一个(自定义)EF上下文 并且放在数据内存中去
dbContext = new BaseDBContext();
CallContext.SetData("DbContext", dbContext);
}
return dbContext;
}
public BaseRepository(){
this.db = DbContextFactory.GetCurrentDbContext();
this.dbSet = db.Set<TEntity>();
}
public class EFNewsPaperGroupRepository : BaseRepository<Models.NewsPaperGroup>, INewsPaperGroupRepository{
public IQueryable<Models.NewsPaperGroup> NewsPaperGroup
{
get
{
return Entities;
}
}
}
public interface INewsPaperGroupRepository{
IQueryable<Models.NewsPaperGroup> NewsPaperGroup { get; }
bool Save(Models.NewsPaperGroup model);
bool Delete(Models.NewsPaperGroup model);
bool Update(Models.NewsPaperGroup model);
}
第三种:使用HttpContext:来源参考:https://blog.csdn.net/chwenbin/article/details/79110737
public class DbContextHelper
{
/// <summary>
/// 创建DBContext对象,并存放到HttpContext.Current.Items集合中。
/// </summary>
/// <returns></returns>
public static T CreateDbContext<T>(string key) where T : class, new()
{
T context = HttpContext.Current.Items[key] as T;
if (context == null)
{
context = new T();
HttpContext.Current.Items.Add(key, context);
}
return context;
}
/// <summary>
/// 释放DBContext对象
/// </summary>
public static void DisposeDbContext(string key)
{
if (HttpContext.Current.Items.Contains(key))
{
HttpContext.Current.Items.Remove(key);
}
}
}
后面两种方法我不是很懂,欢迎大神赐教,后面也会去实现的
下面这篇博客地址 也可很好的帮助理解:
https://www.cnblogs.com/jihua/archive/2013/05/23/efmoshi.html