我們試圖讓我們的商店中的實體框架與現有的數據庫一起工作(因此,更改數據庫模式不是一種選擇),我們創建的用於測試事物的單元測試顯示出一些非常奇怪的行爲。實體框架:從哪裏得到這些列?
這是它吐出來了,我們有一個特定的對象的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)我們使用的是實體框架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-第一,但沒有工作,所以我們目前正在做代碼優先。
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");
你如何使用實體框架?你使用流利的映射,還是使用edmx文件?您是否正在使用內置於設計師的反向設計?什麼版本的實體框架?你能發佈數據模型相關部分的截圖嗎? –
顯示模型,POCO類或自定義DbContext。 –
看起來他們可能是代碼優先生成的外鍵字段。 – jrummell