Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF核心外键通过Fluent API_C#_Entity Framework Core_Ef Core 2.0_Ef Core 2.1 - Fatal编程技术网

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
作为外键(而不是单独的财产)。