代码优先到现有数据库,Context.Set <t>不起作用

时间:2016-07-06 00:51:10

标签: c# entity-framework ef-code-first

我尝试使用Code首先在现有数据库中的解决方案中实现通用存储库。当我尝试做一个Context.Set时,我得到一个错误,指出&#34;实体类型不是当前上下文模型的一部分&#34;。我错过了什么?

public partial class CPContext : DbContext
{
    public CPContext()
        : base("name=CPContext")
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

    }
}

型号:

[Table("Core.Tenant")]
public partial class Tenant : IEntity
{
}

用法:

var context =  new CPContext();
var dbSet = context.Set<Tenant>();
var results = dbSet.ToList(); 

这会抛出错误 - 实体类型不是当前上下文的模型的一部分

我能够通过更改Context的OnModelCreating事件来实现它 -

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Tenant>().ToTable("Core.Tenant");
    }

但我不确定为什么在为表名使用数据注释时需要执行上述操作?完全迷失在这里

1 个答案:

答案 0 :(得分:1)

您在上下文中缺少DbSet。

public partial class CPContext : DbContext
{
    public DbSet<Tenant> Tenants { get; set;}

    public CPContext()
        : base("name=CPContext")
    {

    }

这就是注释映射不起作用的原因。 EF无法知道它必须映射该类。