如何在EF 7流畅建模中表达这种1对1?

时间:2016-08-19 05:47:35

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

我试图将EF 6模型迁移到EF 7,但我坚持一点。我试过几个人的建议无济于事。

这是在EF 6中表达的属性:

modelBuilder.Entity<StockItem>()
    .HasOptional(e => e.StockItemHolding)
    .WithRequired(e => e.StockItem);

使用这样的代码,我收到以下错误:

  

错误CS1061&#39; EntityTypeBuilder&#39;不包含   &#39; HasOptional&#39;的定义没有扩展方法&#39; HasOptional&#39;   接受类型&#39; EntityTypeBuilder&#39;的第一个参数。   可以找到(你错过了使用指令或程序集   引用?)

我已检查过文档,WithRequired是问题所在。它已被WithOne取代。多对多关系很好地工作,就像这样:

modelBuilder.Entity<StockItem>()
    .HasMany(e => e.StockItemTransactions)
    .WithOne(e => e.StockItem).IsRequired()
    .OnDelete(DeleteBehavior.Restrict);

1 个答案:

答案 0 :(得分:0)

在EF Core Fluent API中Required / Optional(以及Dependent / Principal)不再是Has / {{1}的一部分}} 方法。它们已被With / HasOne替换为WithOne

但是,有关EF Core中IsRequired关系的其他一些重要细节。

首先,one-to-one仅适用于依赖实体,即从主体方面,关系始终是可选的。

其次,您需要指定依赖外键,可以是PK或单独字段(显式或阴影)。

因此,上述EF6配置(创建Shared Primary Key Association)的等效EF Core配置将如下(假设IsRequired PK被称为StockItemHolding):

Id