我想創建一個自定義實體框架(4.2)實體,它將映射到我的數據庫,就像它將在代碼優先的方法中完成的一樣。實體框架:數據庫優先/代碼優先混合
問題是我的實體框架數據模型首先使用數據庫。
如何將我的自定義實體添加到實體框架的上下文中?
我想創建一個自定義實體框架(4.2)實體,它將映射到我的數據庫,就像它將在代碼優先的方法中完成的一樣。實體框架:數據庫優先/代碼優先混合
問題是我的實體框架數據模型首先使用數據庫。
如何將我的自定義實體添加到實體框架的上下文中?
如果數據庫首先表示您已經擁有從退出數據庫創建的EDMX,那麼您無法首先使用代碼。您必須從數據庫創建表格並更新模型(EDMX),以將其包含在EDMX中。
編輯基於評論:
我要創造條件,基本上是一個打火機 版本用戶的BriefUser實體,但它會從用戶 外鍵檢索性能。
這是可能的。您可以創建BriefUser作爲普通類並在查詢中使用投影。
var breifUser = (from x in context.Users
where ...
select new BriefUser
{
// Fill BreifUser's properties here
}).FirstOrDefault();
你甚至可以重構前的代碼可重用的擴展方法:
public static IQueryable<BriefUser> ProjectUser(this IQueryable<User> query)
{
return query.Select(x => new BreifUser()
{ // Fill BreifUser's properties here });
}
,並用它喜歡:
var briefUser = context.Users.ProjectUser().FirstOrDefault(...);
也可以定義自己的新類爲「實體視圖」。第一個問題是每個表只能映射到一個實體(除了繼承或拆分等高級概念外),因此您無法將BriefUser定義爲新的實體類型,因爲將User
和BriefUser
映射到UserTbl
會違反此規則。您必須使用稱爲QueryView的特殊結構。
QueryView
是映射級別的視圖。它允許您創建新的映射類型,這是直接在EDMX的MSL部分中定義的現有映射實體的投影。投影被定義爲自定義實體SQL查詢。問題是QueryView
有侷限性:
QueryView
,並且您必須自己編寫實體SQL查詢。我想保持EDMX文件,而且還可以到實體 (BriefUser)添加到EF的上下文。
這是不可能的。您的BreifUser
只是投影/視圖,EF無法跟蹤更改回原始表,因此您不能將BreifUser
添加到上下文並保留它。在QueryView
的情況下,如果您定義的自定義存儲過程不會如何分解BreifUser
並修改所有相關表,則可以實現此功能。這些存儲過程必須導入到EDMX並映射到視圖實體的數據修改操作。順便說一句。如果將實體映射到數據庫視圖,也會發生同樣的情況,因爲EF將所有視圖視爲只讀視圖。
是的,我確實有EDMX。所以我*必須*爲我的數據模型中的每個實體都有一個表(或視圖)?我不能只擁有一個具有映射到其他實體屬性的屬性的對象(所以它仍然在EF的上下文中)。 –
對不起。我可能不明白你的問題。那麼你真的想做什麼? –
假設我的數據庫中有一個UserTbl表。 此'UserTbl'表映射到我的EDMX文件中的EF實體('用戶')。 我想創建'BriefUser'實體,該實體基本上是'User'的一個較輕版本,但是它會從'User'的外鍵檢索屬性。 我想保留EDMX文件,但也能夠在EF的上下文中添加一個實體('BriefUser')。所以基本上'BriefUser'和'User'將被映射到相同的數據。 - 我希望能夠做到這一點,而無需在數據庫中創建表或視圖。 –