Мы пытаемся заставить 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");