Получение ошибки отображения POCO в Entity Framework - PullRequest
0 голосов
/ 06 октября 2011

Я чувствую, что здесь пропущен какой-то базовый шаг настройки, но я часами перебираю сообщения на форумах, статьи в блогах и видео и продолжаю сталкиваться с той же проблемой, поэтому я думаю, что пришло время писать.

Я получаю ошибку: Не удалось найти информацию сопоставления и метаданных для EntityType 'qTrade.BusinessLayer.Domain.Model.Audit.LoanPool'.

У меня есть файл Entity Model с именем 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

Спасибо

1 Ответ

1 голос
/ 06 октября 2011

Мы обычно рекомендуем использовать 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, Марк

...