2010-08-09 4 views
3

저는 ModelBuilder를 사용하여 기존 데이터베이스를 POCO에 매핑합니다. 나는 수업, 학생 및 회의가 있습니다. 여기에 테이블EF4 탐색없이 기존 데이터베이스에 일대 다 매핑

CREATE TABLE Courses (
    CourseID int, 
    Name string) 

CREATE TABLE Students(
    StudentID int, 
    Name string) 

CREATE TABLE Courses_Students (
    CourseID int, 
    StudentID int) 

CREATE TABLE Meetings (
    MeetingID int, 
    CourseID int, 
    MeetDate datetime) 

그리고 포항 강판

public class Course { 
     public int CourseID { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<CourseMeeting> Meetings { get; set; } 
     public virtual ICollection<Student> Students { get; set; } 
} 
public class Student { 
     public int StudentID { get; set; } 
     public string Name { get; set; } 
} 
public class Meeting { 
     public int MeetingID { get; set; } 
     public int CourseID { get; set; } 
     public DateTime MeetDate { get; set; } 
} 

테이블 매핑이 작동되어 큰 :

modelBuilder.Entity<Course>().MapSingleType().ToTable("Courses"); 
modelBuilder.Entity<Student>().MapSingleType().ToTable("Students"); 
modelBuilder.Entity<Meeting>().MapSingleType().ToTable("Meetings"); 

그리고 조인 테이블과 탐색없이 다 대다 매핑 재산이 작동합니다 (예 : WithMany()에 지정된 Students.Courses 속성이 없음)

modelBuilder.Entity<Course>() 
    .HasMany(c => c.Students) 
    .WithMany() 
    .Map(StoreTableName.FromString("Courses_Students"), 
     (c, s) => new { CourseID = c.CourseID, StudentID = s.StudentID}); 

하지만 조인 테이블이없는 다른 관계를 매핑하는 데 문제가 있습니다. 이것은 분명히 올바르지 않습니다.

modelBuilder.Entity<Course>().HasMany(c => c.Meetings).WithMany(); 

조인 테이블을 원하기 때문에 : Invalid object name 'dbo.Course_Meetings'. 나는 Meeting 객체에 Course 속성을 추가 한 다음

modelBuilder.Entity<Course>() 
    .HasMany(c => c.Meetings) 
    .WithOptional(m => m.Course) 
    .HasConstraint((c, m) => c.CoursID == me.CourseID); 

사용하지만 탐색 속성없이이 작업을 수행하고자 할 수 있습니다. 이것이 EF4와 기존 데이터베이스에서 가능합니까?

답변

1

원래 선언에서 속성을 매핑하지 않았기 때문에 조인 테이블이 필요하다고 가정합니다. 따라서 조인 테이블이 필요합니다.

는 .. 수동으로이 같은 실제 테이블에 속성을 매핑

public class Meeting { 
     public int MeetingID { get; set; } 
     public int CourseID { get; set; } 
     public DateTime MeetDate { get; set; } 

     public Course { get; set; } 
} 

을 시도하고 다음과 같이 구성 :

modelBuilder.Entity<Meeting>(m => new { 
     MeetingId = m.Meeting, 
     MeetDate = m.MeetDate, 
     CourseId = m.Course.Id 
}) 
.HasRequired(m => m.Course) 
.WithMany() 
+1

이 모든 EF5 변경되었습니다,하지만 난 확인하고 싶어 여전히 올바른 것으로 표시해야합니다. –

+0

고마워요. 나는 여전히 EF5에서 비슷한 접근법을 사용하고 있지만 인생은 훨씬 쉬워졌습니다. 더 이상 릴레이션 매핑에 대한 모든 방법 또는 아무것도 필요하지 않습니다. – Gats