6

foreign key association 접근 방식을 사용하여 EF에서 일대일 연결을 얻으려고합니다. 내 경우에는 사용자와 팀 사이에 연관성이 있으며 각각의 탐색 속성이 필요합니다. 데이터를 저장하려고 할 때 문제가 발생했습니다. Entity Framework에서 일대일 연결로 데이터 저장

은 모델이 어떻게 생겼는지 : 같은 데이터를 추가 할 때 지금

modelBuilder.Entity<User>() 
    .HasRequired(u => u.Team) 
    .WithMany() 
    .HasForeignKey(u => u.TeamID); 

modelBuilder.Entity<Team>() 
    .HasRequired(t => t.Owner) 
    .WithMany() 
    .HasForeignKey(t => t.OwnerID) 
    .WillCascadeOnDelete(false); 

그리고 :

public class Team 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int OwnerID { get; set; } 
    public virtual User Owner { get; set; } 
} 

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public int TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

내가 위에 언급 된 블로그 게시물의 지침에 따라 DbContext OnModelCreating() 이러한 비트를 추가 이 :

User u = new User(); 
u.UserName = "farinha"; 
Team t = new Team("Flour Power"); 
u.Team = t; 
t.Owner = u; 
context.Users.Add(u); 
context.Teams.Add(t); 
context.SaveChanges(); 

심지어

User u = new User(); 
u.UserName = "farinha"; 
u.Team = new Team("Flour Power"); 
context.Users.Add(u); 
context.SaveChanges(); 

나는 다음과 같은 오류 받고 있어요 :

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.

이 문제를 해결하는 방법에 대한 어떤 생각을? 데이터를 잘못된 방식으로 저장하고 있습니까? 사전

답변

8

당신은 데이터를 잘못된 방향으로 저장되지 않습니다하지만 당신은 양방향 의존성을 정의하기 때문에 단순히 작동하지 않을 수있는

감사합니다. 팀은 이미 저장된 사용자와 관련된 경우에만 저장할 수 있으며 사용자는 기존 팀과 관련된 경우에만 저장할 수 있습니다.

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public int? TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

그런 다음 먼저 User 개체를 저장해야합니다 그리고 당신은 Team을 절약 할 수 있습니다 : 당신은 (User 예를 TeamId에 대한) 외래 키 속성 널 (NULL)을 표시하여 하나 개의 관계를 선택해야합니다.

User u = new User(); 
u.UserName = "farinha"; 
context.Users.Add(u); 
context.SaveChanges(); 

u.Team = new Team { Name = "Flour Power", OwnerID = u.ID }; 
context.SaveChanges(); 
+0

@ ladislav-mrnka 이로 인해 'NULL'값을 'TeamID'열에 삽입 할 수 없으며 테이블 'DeuceHigh.dbo.User'; 열이 널을 허용하지 않습니다. INSERT가 실패합니다. 성명서가 종료되었습니다. " – Farinha

+1

@Farinha 모델이 변경되었으므로 데이터베이스 테이블도 업데이트 되었습니까? – DDiVita

+0

@Farinha : 이것은 데이터베이스 수준 오류로, User 테이블의 TeamID가 여전히 Null을 허용하지 않음을 의미합니다. 데이터베이스를 다시 작성하거나 수정하지 않았습니다. –

관련 문제