2011-10-05 6 views
0

여기에 몇 가지 기본 설정 단계가 누락 된 것처럼 느껴지지만 포럼 게시물, 블로그 기사 및 비디오를 몇 시간 동안 계속보고 있었고 동일한 문제가 계속 발생했습니다. 게시 할 시간입니다.Entity Framework에서 POCO 매핑 오류가 발생하는 경우

내가 갖는 오류 : 매핑 및 메타 데이터 정보는 EntityType 'qTrade.BusinessLayer.Domain.Model.Audit.LoanPool'에 대한 찾을 수 없습니다.

코드 생성 기능이 해제 된 Audit.edmx라는 Entity Model 파일이 있습니다. 내가 클래스를 가지고

CREATE TABLE [Audit].[LoanPool](
    [Type] [char](1) NULL, 
    [TableName] [varchar](128) NULL, 
    [PK] [varchar](1000) NULL, 
    [FieldName] [varchar](128) NULL, 
    [OldValue] [varchar](1000) NULL, 
    [NewValue] [varchar](1000) NULL, 
    [UpdateDate] [datetime] NULL, 
    [UserName] [varchar](128) NULL, 
    [CommonID] [int] NULL, 
    [LoanPoolAuditId] [int] IDENTITY(1,1) NOT NULL, 

내가 같은 프로젝트에서 다른 곳 POCO을로 만든 : 거기에서 나는 (LoanPoolAuditId는 기본 키입니다 생성 스크립트에서 붙여 넣기)이 테이블의 데이터베이스에서 엔티티를 생성

public class LoanPool 
{ 
    public int CommonID { get; set; } 
    public string FieldName { get; set; } 
    public int LoanPoolAuditId { get; set; } 
    public string NewValue { get; set; } 
    public string OldValue { get; set; } 
    public string PK { get; set; } 
    public string TableName { get; set; } 
    public char Type { get; set; } 
    public DateTime UpdateDate { get; set; } 
    public string UserName { get; set; } 
} 

그리고 Heres는 상황에 맞는 클래스

public class AuditContext : ObjectContext 
{ 
    public AuditContext() 
     : base("name=AuditEntities", "AuditEntities") 
    { 
     this.LoanPools = CreateObjectSet<LoanPool>(); 
    } 

    public ObjectSet<LoanPool> LoanPools { get; set; }   
} 

를 참조 할 수 있도록 연결 문자열을 가지고

"metadata=res://*/EntityModels.Audit.csdl|res://*/EntityModels.Audit.ssdl|res://*/EntityModels.Audit.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=serverName;initial catalog=databaseName;persist security info=True;user id=*SNIP*;password=*SNIP*;multipleactiveresultsets=True;App=EntityFramework&quot;" 

매우 간단합니다 (또는 그렇게 생각했습니다).

컨텍스트의 인스턴스를 인스턴스화하면 CreateObjectSet 단계에서 앞에서 설명한 오류가 발생합니다.

단순하거나 분명한 경우라도 제안 사항은 매우 만족 스럽습니다. POCO를 처음 사용하기 때문에 놓친 좋은 기회가 있습니다.

이동 그림은 내가

감사

답변

1

우리는 일반적 이외에는 아무 것도 EF 4.1과 운영의 주요 수단으로 DbContext를 사용하는 것이 좋습니다 - P 코드 먼저 다른 프로젝트에서 사용에는 문제가 없었다. 다음과 같이이 경우 기존 .edmx 제거하고 AuditContext을 수정하는 데 필요한 것 : http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-code-first-walkthrough.aspx :

public class AuditContext : DbContext 
{ 
    public DbSet<LoanPool> LoanPools { get; set; } 
} 

당신은 여기 공식 블로그에 상응하는 연습을 볼 수 있습니다. 또한 LoanPoolAuditId가 예상 규칙을 따르지 않으므로 [Key] 속성을 LoanPoolAuditId에 두어야합니다. 블로그 게시물에도 언급되어 있습니다.

HTH, 마크

+0

그래서 POCO 및 코드 첫 번째는 4.1 일에 병합있어? – GoodGuyJim

+0

Jim - POCO는 4.0에 도입되었으며, Code First (4.1에서 소개)는 단순히 그 토대 위에 구축되었습니다. POCO는 Code First가 존재할 필요가 있지만 그 반대는 아닙니다. 즉, 대부분의 사람들은 POCO와 Code First를 함께 사용하며 많은 사람들이 Code First가 훌륭한 ORM 경험이라고 생각합니다. –

관련 문제