2012-02-21 3 views
0

먼저 EF 4.1 코드에서 계단식 저장을 시도하고 있습니다.EF 4.1의 계단식 저장이 저장되지 않음

[Table("User")] 
public class User 
    { 
    [Key] 
    public Int64 UserId { get; set; } 
    public virtual UserRole UserRole { get; set; } 

} 

[Table("UserRole")] 
public class UserRole 
{ 
    [Key,Column(Order = 0)] 
    public int RoleID { get; set; } 
    [Key,Column(Order = 1)] 
    public Int64 UserId { get; set; } 


} 

내부에 userrole을 채워서 사용자를 저장하려고 할 때. 그것은 오류를주고있다.

INSERT 문이 FOREIGN KEY 제약 조건 "FK_User_UserRole"과 충돌했습니다. 데이터베이스 "x", 테이블 "dbo.User", 열 'UserId'에서 충돌이 발생했습니다. 그 진술서는 만료되었습니다.

using (Database database = new Database()) 
{     
     database.User.Add(user); 
     database.SaveChanges(); //it is giving error here. 
} 

어떤 아이디어가?

답변

1

공유 기본 키 매핑을 구성해야합니다. 그렇지 않으면 EF가 insert 문을 제대로 정렬 할 수 없습니다. 귀하의 경우 User 레코드를 삽입 한 다음 생성 된 기본 키와 함께 UserRole을 삽입해야합니다.

modelBuilder.Entity<UserRole>().HasRequired(r => r.User) 
    .WithOptional(u => u.UserRole); 
다음

var user = new User { UserRole = new UserRole() }; 

using (Database database = new Database()) 
{     
     database.User.Add(user); 
     database.SaveChanges(); 
} 
당신의 OnModelCreating 방법에서

[Table("User")] 
public class User 
    { 
    [Key] 
    public Int64 UserId { get; set; } 

    public virtual UserRole UserRole { get; set; } 
} 

[Table("UserRole")] 
public class UserRole 
{ 
    [Key,Column(Order = 0)] 
    public int RoleID { get; set; } 

    [Key,Column(Order = 1)] 
    public Int64 UserId { get; set; } 

    public virtual User User { get; set; } 
} 

0

나는 그러나 그것은 당신이 당신의 코드를 같은 오류를 얻을 수 자세한 내용을 자세히 설명 할 수

using (var db = new MyContext()) 
    { 
     var user = new User { UserRole = new UserRole { RoleID = 1, UserId = 1 } }; 
     db.Users.Add(user); 
     db.SaveChanges(); 
    } 

성공, 다음과 같은 재현 오류를 시도?

관련 문제