2013-04-03 2 views
0

저는 Entity Framework 5의 초보자입니다. 사이트에서 검색하려고 시도했지만 유사한 질문이 있지만 답변이 없습니다.EntityFramework가 새 객체를 만들고 탐색 객체에 기존 객체를 추가합니다.

나는이 발표 테이블, 파일 테이블이며 AnnouncementFiles 테이블 는 [FileID에] [AnnouncementId]이 개 필드를 가지며 발표 객체를 가지고 SQL Server의 탐색 속성 파일

public partial class Announcement 
    { 
     //remove other properties 

     public virtual ICollection<File> Files { get; set; } 
    } 

있습니다. 시나리오는 다음과 같습니다. 새 공지를 만들지 만 모든 파일이 이미 데이터베이스에 있습니다. 코드는 여기에 있습니다 :

public void CreateAnnouncement(Announcement announcement, List<Guid> fileIds) 
     { 
      using (var db = new MyDbEntities()) 
      { 
       var files = db.Files.Where(f => fileIds.Contains(f.Id)); 
       db.Announcements.Add(announcement); 
       foreach (var file in files) 
       { 
        announcement.Files.Add(file); 
       } 
       db.SaveChanges(); 
      } 
     } 

및 오류가 같은가 (내 .NET 프레임 워크가 영어가 아닌) 그것이 DefiningQuery을 가지고 있기 때문에, "AnnouncementFiles"EntitySet를 업데이트 할 수 있지만,이 currnet 요소를 지원하기 위해 작동하지 않습니다 .

테이블 구조를 변경할 수 없으므로이를 수행 할 수있는 방법이 있습니까? 일부 게시물에 사용 메서드를 추가했지만 공지 사항을 첨부합니다. 파일에는이 메서드가 없습니다. 감사합니다. .

답변

1

DbContext의 OnModelCreating 메서드에서 연결 테이블을 정의해야합니다.

FluentApi를 사용하여 엔티티 프레임 워크에서 다 대다 관계를 정의해야합니다. 코드는 다음과 같습니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<Annoucement>() 
    .HasMany(x => x.Files) 
    .WithMany(x => x.Announcements) 
    .Map(x => { 
     x.ToTable("AnnouncementFiles"; 
     x.MapLeftKey("AnnouncementID"); 
     x.MapRightKey("FileID"); 
    }); 
} 

나머지 코드는 정상입니다.

+0

내가 문제를 찾아 내 계획. 이것은 EF5와 이전 버전의 차이점입니까? – Bubble

관련 문제