在实体框架中获取POCO映射错误

时间:2011-10-05 21:58:36

标签: entity-framework entity-framework-4.1 poco

我觉得我在这里缺少一些基本的设置步骤,但我已经在几个小时内浏览论坛帖子,博客文章和视频,并且仍然遇到同样的问题,所以我觉得是时候发帖了。

我得到的错误是: 无法找到EntityType'qTrade.BusinessLayer.Domain.Model.Audit.LoanPool'的映射和元数​​据信息。

我有一个名为Audit.edmx的实体模型文件,它关闭了代码生成。在那里,我从数据库中为此表生成了一个实体(从创建脚本粘贴,LoanPoolAuditId是主键):

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课程

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; }
 }

我有上下文类

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,所以我很有可能错过了一些东西。

Go figure我在另一个项目中使用代码优先没有问题:-P

由于

1 个答案:

答案 0 :(得分:1)

我们通常建议使用DbContext作为EF 4.1或更高版本的主要操作方式。在这种情况下,您需要删除现有的.edmx并修改AuditContext,如下所示:

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

您还可以在官方博客上看到相应的演练:http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-code-first-walkthrough.aspx。此外,您需要将[Key]属性放在LoanPoolAuditId上,因为它不符合预期的约定。这也在博客文章中提到过。

HTH, 标记