从Base扩展或覆盖模型

时间:2018-01-30 19:36:06

标签: c# entity-framework model

我正在尝试将新属性添加到我的Base库模型中,我从nuget安装它并尝试在我安装Base的项目中添加新属性

基地模型

public class Product
{
  int Id{ get; set; }
  string Name{ get; set; }
  string Status{ get; set; }
}

在我的项目中,我想添加一个名为Code(string)的新属性,而不更改模型名称

我尝试通过继承基本上下文并忽略下面的基本模型

来做到这一点
public class PDataContext : DataContext
    {
        public PDataContext() : base()
        {
            Configuration.LazyLoadingEnabled = false;            
            Database.SetInitializer<PDataContext>(null);
        }

        public new DbSet<Product> Products { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();            
            modelBuilder.Ignore<ClientApi.Base.Models.Product>();
        }
    }

上述内容无效,因为它引发了异常"The entity type Product is not part of the model for the current context."

我知道最佳方法吗?

1 个答案:

答案 0 :(得分:0)

您没有在帖子中包含它,但我认为您要使用的实体继承自Product并包含一个额外的属性Code这样的内容?

public class MyProduct : Product
{
    public string Code { get; set; }
}

在这种情况下,您可以在上下文中使用MyProduct而不是Product

public class PDataContext : DataContext
{
    public PDataContext() : base()
    {
        Configuration.LazyLoadingEnabled = false;            
        Database.SetInitializer<PDataContext>(null);
    }

    public new DbSet<MyProduct> Products { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<MyProduct>().ToTable("Product");
    }
}