2013-06-11 2 views
0

지난 며칠 동안 저는 C#으로 작성된 기존의 구조화 응용 프로그램을 사용하여 사용자 지정 데이터 액세스 계층 대신 Entity Framework를 사용했습니다. 내가 특정 POCO를 만날 때까지 모든 것이 잘 진행되었다.Entity Framework를 기존 데이터베이스 및 Poco 구조체와 함께 사용하는 방법

이 POCO에는 6 가지 속성이 있으며 그 중 4 가지는 기본 유형입니다. 그러나 나머지 2 가지 항목은 다른 기존 POCO이기 때문에 문제가됩니다. 이 내게 문제가있는 이유는 Entity Framework를 사용하여 데이터베이스에 액세스하려고 할 때 Linq to Entity를 사용하면 올바르게 작동하지 않기 때문입니다.

오류 : "명령 정의를 실행하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오." 의 InnerException는 "의 InnerException은 = {"잘못된 열 이름은 'Course_CourseId'\ 연구 \ nInvalid 열 이름 'Student_StudentId'\ 연구 \ nInvalid 열 이름 'Staff_StaffId을'... "}"

내 데이터베이스 구조는 :

나는 CourseOfferings 표에 대한이
UniversityCatalog 
Table: Courses 
    -Field: CourseId (Guid) 
    -Field: CourseName (String) 
    -Field: CourseNumber (String) 
    -Field: Comments (String) 
    -Field: CreditHours (int) 
    -Field: CourseTypeId (int) (ForeignKey: CourseTypes.CourseTypeId) 
Table: CourseTypes 
    -Field: CourseTypeId (int) 
    -Field: CourseTypeName (String) 
Table: Staffs 
    -Field: StaffId (Guid) 
    -Field: FirstName (String) 
    -Field: LastName (String) 
    -Field: EmployeeId (int) 
Table: Students 
    -Field: StudentId (Guid) 
    -Field: FirstName (String) 
    -Field: LastName (String) 
    -Field: Grade (String) 
Table: CourseOfferings 
    -Field: CourseOfferingId (Guid) 
    -Field: CourseId (Guid) (ForeignKey: Courses.CourseId) 
    -Field: StaffId (Guid) (ForeignKey: Staffs.StaffId) 
    -Field: Start Time (String) 
    -Field: End Time (String) 
    -Field: DayOfWeek (String) 
Table: CourseRegistrations 
    -Field: CourseOfferingId (ForeignKey: CourseOfferings.CourseOfferingId) 
    -Field: StudentId (ForeignKey: Students.StudentId) 

POCO은 다음과 같습니다

public class CourseOffering 
{ 
    public Guid CourseOfferingId { get; set; } 
    public String DayOfWeek { get; set; } 
    public String StartTime { get; set; } 
    public String EndTime { get; set; } 
    public Course Course { get; set; } 
    public Student Student { get; set; } 
    public Staff Staff { get; set; } 
} 

내가 그러나 내가 일을 할 것입니다 무슨 생각이 없다, 내 상황에 맞는 파일에 일부 사용자 지정 매핑을해야 할 거라고 생각한다. 모든 팁이나 포인터가 크게 도움이 될 것입니다! 감사!

(또한 여기 내 상황에 맞는 파일 :

class GatewayContext: DbContext 
{ 
    public DbSet<Course> Course { get; set; } 
    public DbSet<CourseType> CourseTypes { get; set; } 
    public DbSet<CourseOffering> CourseOfferings { get; set; } 
    public DbSet<Staff> Staff { get; set; } 
    public DbSet<Student> Students { get; set; } 
} 

주의 :이 그냥

+0

"제대로 작동하지 않습니다"는 도움이되지 않습니다. 실제 컴파일 오류 메시지/런타임 예외를 게시하십시오. – ken2k

+0

그래, 미안해. 깜빡 했네. 오류 메시지와 예외로 질문을 업데이트했습니다. –

답변

1

가장 쉬운 방법은 다운로드 및 Entity Framework Power Tools를 설치하는 것입니다 이러한 기술을 사용하여 연습 할 수있는 모의 프로젝트, 그럼 그냥 역 POCO를 사용하여 데이터베이스를 Code First 모델로 설계하십시오. 쉽고 간단하며 약 2 분이 걸립니다.

단점은 EFPT가 속성을 사용하는 대신 완전히 유창한 구성 모델로 모델을 전환한다는 것입니다. 나는 속성을 좋아하지 않는다. 그래서 그것은 나에게 좋다.

+0

이것은 가능한 해결책이지만 가능하다면 전동 공구를 사용하여 코드를 생성하는 것을 피하고 싶습니다. 나는 프레임 워크를 처음 접했을 때부터 손으로 직접하는 법을 배우려고 노력하고 있는데, 보통 나는 그런 것들을 가장 좋아한다. 답변을 주셔서 감사합니다! –

+0

@NightW. - 전동 공구를 사용하면 코드를보고 자신이하는 일을 볼 수 있습니다. –

+0

네, 그렇다고해서 저에게 많은 도움이되지는 않습니다. 내가 가지고있는 다른 문제는 나에게 모의 프로젝트를 할당 한 사람이 POCO를 가능한 한 많이 떠나라고 말한 것입니다. 왜 내가 그렇게 말했는지 완전히 모르겠지만. 이전 코드에서는 전송 객체로 사용되었습니다. –

1

다른 엔티티에 대한 탐색 속성이 문제 일 수 있다고 생각합니다. 엔티티 프레임 워크가 이러한 등록 정보를 프록시로 대체하여 가상 키를 외부 키로 액세스 할 수있게하려면 virtual 키워드를 포함해야 할 수도 있습니다.

public class CourseOffering 
{ 
    public Guid CourseOfferingId { get; set; } 
    public String DayOfWeek { get; set; } 
    public String StartTime { get; set; } 
    public String EndTime { get; set; } 

    public Guid CourseId { get; set; } 
    public Guid StudentId { get; set; } 
    public Guid StaffId { get; set; } 

    public virtual Course Course { get; set; } 
    public virtual Student Student { get; set; } 
    public virtual Staff Staff { get; set; } 
} 

반면에 내가 Guid를 기본 키 필드로 사용하지 못할 수도 있음을 발견했습니다.

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/37fd6405-3441-4b2b-82f6-266b79d86708

+0

이 변경으로 인해 "InnerException = {"Invalid column name 'StudentId'. "}"내부 예외가 발생합니다. 그렇다면 다른 POCO에 영향을 미칩니 까? 그들은 모두 기본으로 가이드를 사용합니까? –

+0

먼저 코드를 사용하려고합니까? 기존 데이터베이스가있는 경우이를 기반으로 EF 모델을 작성하고 생성 된 특성을 확인하십시오. 그래도 작동하지 않는다면 다음 데모에서 코드를 추가하여 작동 시키십시오. http://geekswithblogs.net/danemorgridge/archive/2010/02/12/guids-as-primary-keys-with-entity-framework -4.aspx – Stokedout

+0

그걸 실험 해봐야 할 것 같네요. –

관련 문제