Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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#_Entity Framework_Composite Key_Ef Fluent Api - Fatal编程技术网

C# 复合唯一索引

C# 复合唯一索引,c#,entity-framework,composite-key,ef-fluent-api,C#,Entity Framework,Composite Key,Ef Fluent Api,我有以下模型,我想使用FluentApi指定表A、B.Id和C.Id中的paire是唯一的 class A { public int Id { get; set; } public B B { get; set; } public C C { get; set; } } class B { public int Id { get; set; } } class C { public int Id { get; set; } } 仅使用导航属性是不可能的

我有以下模型,我想使用FluentApi指定表A、B.Id和C.Id中的paire是唯一的

class A
{
    public int Id { get; set; }
    public B B { get; set; }
    public C C { get; set; }
}
class B
{
    public int Id { get; set; }
}
class C
{
    public int Id { get; set; }
}

仅使用导航属性是不可能的

您需要添加显式FK字段:

class A
{
    public int Id { get; set; }
    public int B_Id { get; set; }
    public int C_Id { get; set; }
    public B B { get; set; }
    public C C { get; set; }
}
并使用以下Fluent API配置创建唯一索引:

modelBuilder.Entity<A>().HasRequired(e => e.B).WithMany().HasForeignKey(e => e.B_Id);
modelBuilder.Entity<A>().HasRequired(e => e.C).WithMany().HasForeignKey(e => e.C_Id);

modelBuilder.Entity<A>().Property(e => e.B_Id).HasColumnAnnotation("Index", 
    new IndexAnnotation(new IndexAttribute("IX_BC", 1) { IsUnique = true }));
modelBuilder.Entity<A>().Property(e => e.C_Id).HasColumnAnnotation("Index", 
    new IndexAnnotation(new IndexAttribute("IX_BC", 2) { IsUnique = true }));
modelBuilder.Entity();
modelBuilder.Entity().HasRequired(e=>e.C.).WithMany().HasForeignKey(e=>e.C_Id);
modelBuilder.Entity().Property(e=>e.B_Id).HasColumnAnnotation(“索引”,
新指数说明(新指数属性(“IX_BC”,1){IsUnique=true});
modelBuilder.Entity().Property(e=>e.C_Id).HasColumnAnnotation(“索引”,
新指数说明(新指数属性(“IX_BC”,2){IsUnique=true});

如果B和C的组合是唯一的,您真的需要Id吗?