2016-10-10 3 views
1

У меня есть следующие модели, я хочу, чтобы указать с помощью FluentApi, что Paire в таблице А, B.Id и C.Id являются уникальнымиComposite уникальный индекс

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; } 
} 
+0

Если комбинация B и C является уникальным, вы на самом деле нужен идентификатор? – Win

ответ

1

Это не возможно только с навигационными свойствами.

Вам необходимо добавить явные 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 })); 
Смежные вопросы