2013-03-03 5 views
3

데이터베이스를 만들기위한 코드 첫 번째 방법을 사용하기 시작했습니다. 내가 3 개 테이블을 다음 있습니다 :코드 첫 번째 INSERT 문을 FOREIGN KEY 제약 조건과 충돌했습니다.

public partial class AccountHolder 
{ 
    public int AccountHolderId { get; set; } 

    public virtual List<Address> Address { get; set; } 
} 

public partial class Nominee 
{ 
    public int NomineeId { get; set; } 

    public virtual List<Address> Address { get; set; } 
} 

public partial class Address 
{ 
    public int AddressId { get; set; } 

    public int AccountHolderId { get; set; } 
    public AccountHolder AccountHolder { get; set; } 

    public int NomineeId { get; set; } 
    public Nominee Nominee { get; set; } 
} 

여기 AccountHolderNominee 모두는 주소 1 to * replationship 있습니다. 내가이 사용되는 유창한 API 코드는 다음과 같습니다

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Address>().HasRequired(p => p.AccountHolder) 
             .WithMany(p => p.Address) 
             .HasForeignKey(p => p.AccountHolderId) 
             .WillCascadeOnDelete(false); 
     modelBuilder.Entity<Address>().HasRequired(p => p.Nominee) 
             .WithMany(p => p.Address) 
             .HasForeignKey(p => p.NomineeId) 
             .WillCascadeOnDelete(false); 
    } 

이제 내 문제는 내가이 예외있어 계좌주의 또는 후보에 데이터를 삽입하려고 할 때마다입니다 :의 계좌를 삽입의 경우

가 {FK_dbo.Addresses_dbo.Nominees_NomineeId \ "외래 키 제약 \와 INSERT 문 충돌"CodeFirst.BankContext \ ". 충돌 데이터베이스 \ 발생" "테이블 \"dbo.Nominees \ "열 ' NomineeId '. \ r \ n 문장에 벌이 있습니다. N 말단. "}

후보 삽입

{경우"외래 키 제약 \ "FK_dbo.Addresses_dbo.AccountHolders_AccountHolderId \"와 충돌 삽입 문. 충돌은 테이블 \ "CodeFirst.BankContext \"데이터베이스 \ 발생 "dbo.AccountHolders \"열 'AccountHolderId'. \ 연구 \의 n이 문이 종료되었습니다. "}

Cananybody 방법을 가르쳐주십시오 이 문제를 해결하고 내가 무엇을 놓치고 있습니까?

답변

4

Nominee.Nouinee에 존재하지 않는 주소 Nominees_NomineeId를 삽입하려고합니다 .Nominee의 첫 번째 인스턴스가 있어야합니다. 그 다음 값을 채우고 주소 및 채우기 값을 만들고 마지막으로 AccountHolder 인스턴스를 만듭니다. 저장

+0

답변 해 주셔서 감사합니다. 하지만 지금은 내가 nominee 또는 accountholder를 삽입 할 때마다 나는 후보자 삽입의 경우에는 후보자를위한 빈 개체를 만들고 후보자 삽입의 경우 accountholder에 대한 빈 개체를 만들어야 만한다. 두 가지 모두의 기본값을 설정할 수있는 방법이있다. 이러한 탐색 속성 중? – gaurav

+0

난 당신이 가치를 삽입해야합니다 그리고 예를 들어, U 테이블에 값을 삽입하고 그것을 사용해야합니다 그것을 사용하는 것 같아요. –

+0

괜찮 았지만 호기심에 대한 기본값을 둘 다 설정하는 것과 관련된 문제는 무엇입니까? – gaurav

1

dbo.AccountHolders 및 dbo.Nominees 테이블에는 다른 테이블에 대한 외래 키 참조가 있습니다 .FK 작동 방식은 해당 열에서 참조 된 테이블의 기본 키 열에도없는 값.

SQL Server Management Studio가있는 경우 열어서 sp_help 'dbo.dbo.Nominees'를 엽니 다. FK가있는 열과 참조하는 테이블의 열을 확인하십시오. 잘못된 데이터를 삽입하는 중입니다. sp_help 'dbo.dbo.AccountHolders'에 대해서도 마찬가지입니다.

희망이 도움이됩니다.

관련 문제