Мы пытаемся заставить 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, но это не сработало, поэтому в настоящее время мы выполняем code-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");