2013-06-13 1 views
2

Entity Framework에 대해 Code First example으로 방금 놀았으며 이해가 안되는 문제가 발생했습니다. POCO 개체와 데이터베이스 컨텍스트가 예에서와 동일하고 있다고 가정 내 응용 프로그램의 진입 점에 다음 코드를 가지고 :다른 개체에서 동일한 개체를 여러 번 참조하는 Entity Framework

var blog = new Blog { Name = "My Blog" }; 
var post = new Post {Title = "A Random Post", Blog = blog}; 
blog.Posts = new List<Post> {post}; 
db.Blogs.Add(blog); 

var blog2 = new Blog {Name = "Another Blog", Posts = new List<Post> {post}}; 
db.Blogs.Add(blog2); 

db.SaveChanges(); 

// Display all Blogs from the database 
var query = from b in db.Blogs 
      orderby b.Name 
      select b; 

Console.WriteLine("All blogs in the database:"); 
foreach (var item in query) 
{ 
    Console.WriteLine(item.Name); 
    foreach (var p in item.Posts) 
    { 
     Console.WriteLine(p.Title); 
    } 
} 

왜 모두 블로그에서 참조하는 게시물, 만 나타 납니까을 두 번째 블로그에? 데이터베이스에 무언가를 추가 할 때마다 SaveChanges 번으로 전화해야합니까?

답변

5

게시물은 하나의 블로그에만 속할 수 있습니다. 두 번째 블로그의 게시물 목록에 추가하면 첫 번째 블로그에 대한 참조가 덮어 씁니다.

+1

절대적으로 맞습니다! –

+1

좋은 답변입니다. 나는 내 실수를 이해합니다. Post 모델에서 단일 블로그 모델에 대한 참조를 가짐으로써 EF는 하나의 블로그에만 게시물을 포함해야 함을 이해합니다. Tim B가 지적한 것처럼 다 대다 관계를 원한다면 대신 Blog 객체 컬렉션을 만들어야합니다. 그런 다음 각 게시물을 원하는 수의 블로그에 추가 할 수 있습니다. –

1

Blog 및 Post 엔티티는 다 대다 관계가있는 것으로 보입니다. DbContext에서이 관계를 설정 했습니까? 여기

예 : EF Code First working with many-to-many relationships

대다가 의도하지 않은 경우, 다음 크리스토프의 답변을 참조하십시오.

+0

그는 구성을 만들 필요가 없습니다. 이 경우 컨피규레이션에 대한 협약이이를 처리 할 것입니다. –

관련 문제