Entity Framework: откуда, черт возьми, он получает эти столбцы?

Мы пытаемся заставить Entity framework работать в нашем магазине с помощью существующая база данных (и, следовательно, изменение схемы базы данных НЕ является вариантом), а модульные тесты, которые мы создали для проверки, демонстрируют действительно странное поведение.

Это SQL, который он выдает для конкретного объекта, который у нас есть:

SELECT 
[Extent1].[CommentTypeId] AS [CommentTypeId], 
[Extent1].[DataPartId] AS [DataPartId], 
[Extent1].[CommentId] AS [CommentId], 
[Extent1].[CreatedTime] AS [CreatedTime], 
[Extent1].[Message] AS [Message], 
[Extent1].[From] AS [From], 
[Extent1].[Likes] AS [Likes], 
[Extent1].[SourceTypeId] AS [SourceTypeId], 
[Extent1].[StatusMessage_DataPartId] AS [StatusMessage_DataPartId], 
[Extent1].[Album_DataPartId] AS [Album_DataPartId]
FROM [dbo].[Comments] AS [Extent1]

Последние два запрошенных столбца, как вы могли заметить, не похожи на другие. Это потому, что их на самом деле не существует, и мы понятия не имеем, почему Entity их запрашивает! Ни в наших файлах конфигурации, ни в наших POCO они вообще не упоминаются. Фактически, что касается нашей базы данных, это совершенно разные концепции и вообще не связаны напрямую.

Откуда он берет эти столбцы и как мне сказать, чтобы он их вырезал?

РЕДАКТИРОВАТЬ: Чтобы ответить на некоторые из приведенных ниже вопросов, 1) Мы используем Entity Framework 4.2. Мы используем быстрое отображение.

2) Сам POCO выглядит так, с вырезанным для краткости беспорядком равенства:

public long DataPartId { get; set; }
public string CommentId { get; set; }
public DateTime? CreatedTime { get; set; }
public string Message { get; set; }
public string From { get; set; }
public int? Likes { get; set; }
public string SourceTypeId { get; set; }
public int CommentTypeId { get; set; }

public virtual DataPart DataPart { get; set; }
public virtual CommentType CommentType { get; set; }

3) Мы не используем edmx. У нас есть собственный DbContext. Ужасно интересных строк не так уж и много. Эти два, вероятно, представляют интерес:

    Configuration.LazyLoadingEnabled = true;
    Configuration.ProxyCreationEnabled = true;

Помимо этого, в файле контекста много

modelBuilder.Configurations.Add(new WhateverConfiguration()) 

и

public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; }

4) Мы начали с db-first, но это не сработало, поэтому сейчас мы делаем код -первый.

5) Это внутренняя часть конфигурации для этого конкретного POCO:

    HasRequired (x => x.DataPart)
        .WithRequiredDependent (x => x.Comment);

    HasRequired (x => x.CommentType)
        .WithMany (x => x.Comments)
        .HasForeignKey (x => x.CommentTypeId);

    HasKey (x => x.DataPartId);
    ToTable ("Comments", "dbo");
7
задан tmesser 23 November 2011 в 21:23
поделиться