C# EF核心外键通过Fluent API
我有两门课:C# EF核心外键通过Fluent API,c#,entity-framework-core,ef-core-2.0,ef-core-2.1,C#,Entity Framework Core,Ef Core 2.0,Ef Core 2.1,我有两门课: 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
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做到这一点?我不希望在我的实体类中使用数据注释。您拥有的是与主体实体项
和从属实体项统计数据
的关系,使用所谓的,其中从属实体PK也是主体实体的FK
用于一对一关系的流畅API包括HasOne
、WithOne
、HasForeignKey
和HasPrincipalKey
。请注意,HasForeignKey
和HasPrincipalKey
(通常在一对多关系中省略)的泛型类型参数在这里很重要,因为它们标识了哪个实体是主体,哪个依赖
话虽如此,您的模型的流畅配置是:
modelBuilder.Entity<ItemStats>()
.HasOne(e => e.Item)
.WithOne()
.HasForeignKey<ItemStats>(e => e.Id);
modelBuilder.Entity()
.HasOne(e=>e.Item)
.WithOne()
.HasForeignKey(e=>e.Id);
谢谢,我正在尝试modelBuilder.Entity().HasOne(I=>I.Item).WithOne().HasForeignKey(“Item”);但它不起作用。你能解释一下这个代码在做什么吗?提前ty。它告诉EF:(1)ItemStats
有一个Item
带有导航属性ItemStats。Item
,(2)Item
有一个ItemStats
没有导航属性,(3)ItemStats
是依赖项,并使用PK属性Id
作为外键(而不是单独的财产)。