zoukankan      html  css  js  c++  java
  • EFCore 源码

    看看  _context.students.Add(str);

    这句话的源码。

    程序运行到这里,查看到students 的类型是 Microsoft.EntityFrameworkCore.Internal.InternalDbSet<>

    转到github上查看源码。 

    public override EntityEntry<TEntity> Add(TEntity entity)  => _context.Add(entity);

    可以看到这只是 _context 的封装。

    Context  中,Add,Update,Attache,基本一样,只是改变状态而已。Delete 多了层判断

      public virtual EntityEntry<TEntity> Add<TEntity>([NotNull] TEntity entity)  where TEntity : class
            {
                CheckDisposed();
                return SetEntityState(Check.NotNull(entity, nameof(entity)), EntityState.Added);
            }


     public virtual EntityEntry<TEntity> Attach<TEntity>([NotNull] TEntity entity) where TEntity : class
     {

       return SetEntityState(Check.NotNull(entity, nameof(entity)), EntityState.Unchanged);
    }

    public virtual EntityEntry<TEntity> Update<TEntity>([NotNull] TEntity entity) where TEntity : class
    {

    return SetEntityState(Check.NotNull(entity, nameof(entity)), EntityState.Modified);

    }

      Attach 就是和AsNotracking的反向操作。

    2. 新建webapi 项目,引入ef, 类似这样:

       services.AddDbContext<lectureContext>(options => options.UseSqlServer(Configuration.GetConnectionString("lectureContext")));

    想当然的,会有DBContext 是抽象类,实现类是lectureContext,那么

      直接在 Configure() 方法中引入DBContext,这样写 public void  Configure(.....,DBContext  context), 会发现这个依赖注入是没有的,运行时会报错。public void  Configure(.....,lectureContext context), 这样就可以了。

    查看源码:,这是在容器中,上面的写法抽象类和实现类是一样的。

    气功波(18037675651)
  • 相关阅读:
    若不曾忘记,便不必追忆
    C# 随机生成中文字符串
    C# SQLiteHelper
    C# SQLHelper
    C# Microsoft SQL Server 操作
    C# Excel 操作
    C# XML文件操作(续)
    C# 遍历XML文件,添加,更新,删除节点
    MES系统简介
    SQL Server 存储过程(转)
  • 原文地址:https://www.cnblogs.com/qgbo/p/12133578.html
Copyright © 2011-2022 走看看