EF6 - TPT - 继承 - 数据库优先

时间:2015-04-01 21:18:35

标签: c# entity-framework entity-framework-6

我有2个表,Products(我的基础)和OffShelfItems(由孩子)

我在ID字段上设置了外键,以下是此设置的屏幕截图:

enter image description here

在我的EDMX中,我导入了表并将OffShelfItem设置为产品类的成员,以下是该设置的屏幕截图:

enter image description here

但是,当我尝试使用此测试代码保存对象时:

OffShelfItem osi = new OffShelfItem();
            osi.WhenAdded = DateTime.Now;
            osi.LastModified = DateTime.Now;
            osi.IsDeleted = false;
            osi.Title = "TEST ITEM";
            osi.RetailPrice = 9.99M;
            osi.DealerPrice = 7.99M;
            ent.Products.Add(osi);
            ent.SaveChanges();

我收到此错误:

  

指定的架构无效。错误:App_Code.Model.ssdl(75,6):   错误0113:多重性在角色'AA_OffShelfItems'中无效   关系'FK_AA_OffShelfItems_AA_Products'。因为依赖   角色是指关键属性,即多重性的上限   依赖角色必须为1。

我觉得我必须非常接近让这个工作,我只需要帮助到达那里!

1 个答案:

答案 0 :(得分:1)

id必须是AA_OffShelfItems表上的主键。

这里的解释很好:

https://leftlobed.wordpress.com/2011/03/02/getting-to-know-entity-framework-table-per-type-tpt-inheritance/

[UPDATE:]

然后,您可以按照以下答案中的说明扩展您的上下文来访问OffShelfItems

EF Database First with TPT Inheritance only creates DbSet<T> for base clases

有类似的东西:

context.Products.OfType<OffShelfItem>()

或:

partial class Context
{
    public DbSet<OffShelfItem> OffShelfItem{ get; set; }
}