【问题标题】:Getting POCO mapping error in Entity Framework在实体框架中获取 POCO 映射错误
【发布时间】:2011-10-05 21:58:35
【问题描述】:

我觉得我在这里遗漏了一些基本的设置步骤,但我已经在论坛帖子、博客文章和视频中费了几个小时,并且一直遇到同样的问题,所以我认为是时候发帖了。

我得到的错误是: 找不到 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,所以很有可能我错过了一些东西。

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

谢谢

【问题讨论】:

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


    【解决方案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, 标记

    【讨论】:

    • 那么 POCO 和 Code First 在 4.1 中合并为一个?
    • Jim - POCO 是在 4.0 中引入的,Code First(在 4.1 中引入)只是建立在该基础之上。 POCO 是 Code First 存在的必要条件,反之则不然。也就是说,大多数人同时使用 POCO 和 Code First,并且许多人认为 Code First 是一种出色的 ORM 体验。
    猜你喜欢
    • 2011-05-06
    • 2014-12-18
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2010-10-09
    • 2013-05-17
    • 2012-05-23
    • 2023-03-20
    相关资源
    最近更新 更多