Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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# 与多个中的复合键的一对多关系需要定义主键_C#_Sql Server - Fatal编程技术网

C# 与多个中的复合键的一对多关系需要定义主键

C# 与多个中的复合键的一对多关系需要定义主键,c#,sql-server,C#,Sql Server,在代码优先的c#中,我有以下一对多表层次结构: 公共类负责人 { 公共Guid Id{get;set;} 公共ICollection项{get;set;} 公共静态void CreateModel(ModelBuilder ModelBuilder) { modelBuilder.Entity(Entity=> { ToTable(name of(Head),模式:“dbo”); entity.HasKey(e=>e.Id); Property(e=>e.Id).IsRequired(); en

在代码优先的c#中,我有以下一对多表层次结构:

公共类负责人
{
公共Guid Id{get;set;}
公共ICollection项{get;set;}
公共静态void CreateModel(ModelBuilder ModelBuilder)
{
modelBuilder.Entity(Entity=>
{
ToTable(name of(Head),模式:“dbo”);
entity.HasKey(e=>e.Id);
Property(e=>e.Id).IsRequired();
entity.HasMany(c=>c.Items),其中一个(e=>e.Head);
});
}
}
公共类项目
{
公共Guid头ID{get;set;}
公共头{get;set;}
公共字节语言ID{get;set;}
公共语言{get;set;}
公共静态void CreateModel(ModelBuilder ModelBuilder)
{
modelBuilder.Entity(Entity=>
{
ToTable(项目名称,模式:“dbo”);
HasKey(e=>new{e.HeadId,e.LanguageId});
Property(e=>e.HeadId).IsRequired();
Property(e=>e.LanguageId).IsRequired();
entity.HasOne(e=>e.Head)。with many(e=>e.Items);
entity.HasOne(e=>e.Language);
});
}
}
它完美地创建了数据库表,但当我想从中读取数据时,会出现以下错误:

InvalidOperationException:实体类型“Item”需要定义主键。如果要使用无键实体类型,请在“OnModelCreating”中调用“HasNoKey”


你不需要任何额外的问题。只需将Id键添加到项中,并使e.HeadId+e.language唯一。您是否从DbContext的
OnModelCreating(modelBuilder modelBuilder)
方法调用
Item.CreateModel(modelBuilder)
public class Head
{
    public Guid Id { get; set; }
    public ICollection<Item> Items { get; set; }

    public static void CreateModel(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Head>(entity =>
        {
            entity.ToTable(nameof(Head), schema: "dbo");
            entity.HasKey(e => e.Id);
            entity.Property(e => e.Id).IsRequired();
            entity.HasMany(c => c.Items).WithOne(e => e.Head);
        });
    }
}

public class Item
{
    public Guid HeadId { get; set; }
    public Head Head{ get; set; }
    public byte LanguageId { get; set; }
    public Language Language { get; set; }

    public static void CreateModel(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Item>(entity =>
        {
            entity.ToTable(nameof(Item), schema: "dbo");
            entity.HasKey(e => new { e.HeadId, e.LanguageId });
            entity.Property(e => e.HeadId).IsRequired();
            entity.Property(e => e.LanguageId).IsRequired();
            entity.HasOne(e => e.Head).WithMany(e => e.Items);
            entity.HasOne(e => e.Language);
        });
    }
}