【问题标题】:EF Core Foreign Key via Fluent API通过 Fluent API 的 EF Core 外键
【发布时间】:2018-11-09 19:03:59
【问题描述】:

我有 2 节课:

public class Item
{
    public int Id { get; set; }
    public string ItemName { get; set; }
}
public class ItemStats //inhenrit from Item
{        
    public int Id { get; set; }
    public int MaxEnhanceLevel { get; set; }

    public Item Item { get; set; }
}

这是一个 TPT,但由于它不支持开箱即用,我不能使用继承。我知道如何使用数据注释来实现这一点

 [ForeignKey(nameof(Item))]
 public int Id { get; set; }

但是我怎样才能通过 FluentAPI 做到这一点呢?我不想在我的实体类中添加数据注释。

【问题讨论】:

    标签: c# entity-framework-core ef-core-2.0 ef-core-2.1


    【解决方案1】:

    您拥有的是One-to-onesingle navigation property、主体实体Item 和依赖实体ItemStats 的关系,使用所谓的shared primary key association,其中依赖实体PK 也是主体实体的FK .

    用于一对一关系的 Fluent API 是 HasOneWithOneHasForeignKeyHasPrincipalKey。请注意,此处HasForeignKeyHasPrincipalKey 的泛型类型参数(通常在一对多关系中省略)很重要,因为它们标识了哪个实体是主体,哪个实体是依赖的。

    话虽如此,您的模型的流畅配置是:

    modelBuilder.Entity<ItemStats>()
        .HasOne(e => e.Item)
        .WithOne()
        .HasForeignKey<ItemStats>(e => e.Id);
    

    【讨论】:

    • 谢谢,我正在尝试 modelBuilder.Entity().HasOne(i => i.Item).WithOne().HasForeignKey("Item");它没有工作。你能解释一下这段代码在做什么吗?提前联系。
    • 嗯,它告诉 EF (1) ItemStats 有一个 Item 具有导航属性 ItemStats.Item,(2) Item 有一个 ItemStats 没有导航属性,(3) ItemStats 是依赖并使用 PK 属性 Id 作为外键(而不是单独的属性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2021-12-06
    • 2013-10-21
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多