2014-02-19 4 views
1

사용 : VS 2013, 엔티티 프레임 워크 코드 첫째, ASP.NET 웹 프로젝트 MVC"소개 FOREIGN KEY 제약 조건"

내가 하나가 필요합니다 같은 테이블 2 FK에서,이 개 모델을 가지고 :

public class A 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
public class B 
{ 
    public int Id { get; set; } 

    public int Id1 { get; set; } 

    [ForeignKey("Id1")] 
    public virtual A A1 { get; set; } 

    public int Id2 { get; set; } 

    [ForeignKey("Id2")] 
    public virtual A A2 { get; set; } 
} 
사이클 또는 여러 개의 캐스케이드 P 발생할 수 있습니다 테이블 'B'에 FOREIGN KEY 제약 조건 'FK_dbo.B_dbo.A_Id2'를 소개

: 나는 Update-Database을 실행할 때

enable-migrationAdd-Migration Test, 후, 나는이 메시지 aths. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오.

+0

저는 속성이 중복되어 있다고 생각합니다. EF는 Id1 및 Id2 소품을 적절한 엔티티의 키로 취급합니다. –

답변

0

사용이 코드

public class A 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
public class B 
{ 
    public int Id { get; set; } 

    public int Id1 { get; set; } 

    [ForeignKey("Id1")] 
    public virtual A A1 { get; set; } 

    public int Id2 { get; set; } 

    [ForeignKey("Id2")] 
    public virtual A A2 { get; set; } 
} 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<B>() 
        .HasRequired(e => e.A1) 
        .WithMany() 
        .HasForeignKey(c => c.Id1) 
        .WillCascadeOnDelete(false) 

        .HasRequired(e => e.A2) 
        .WithMany() 
        .HasForeignKey(c => c.Id2) 
        .WillCascadeOnDelete(false) 
        ;  
    } 

당신이 inverseProperty 속성을 사용할 수 있습니다합니다 alse.

+0

맞아요,하지만 독자 분에게 차이점을 설명해 줄 수있을 것 같아요. 또한 유창한 매핑을 통해 속성없이 수행 할 수 있습니다. –

+0

두 테이블에 많은 관계가있는 경우에는 .WillCascadeOnDelete (false)를 설정하는 데 유창한 API를 사용해야하며 데이터 주석으로는이 작업을 수행 할 수 없습니다. – Iraj

+0

약간의 변경을 통해 솔루션을 사용합니다. OnModelCreating의 call base.OnModelCreating (modelBuilder)를 호출하고 B 클래스의 ForeignKey adnotations를 제거합니다. 내가 다른 프로젝트에 동일한 클래스, A 및 B, OnModelCreating의 동일한 코드를 추가하면 Add-Migration은 몇 가지 필드를 추가했습니다. A1_Id = c.Int(), A2_Id = c.Int ForeignKey ("dbo.A", t => t.A1_Id) .ForeignKey ("dbo.A", t => t.A2_Id), A_Id = c.Int(), A_Id1 = c.Int) .ForeignKey ("dbo.A", t => t.A_Id) .ForeignKey ("dbo.A", t => t.A_Id1) – Narcis

관련 문제