![](/img/trans.png)
[英]Create association on non-primary key fields with Entity Framework 4.1 Fluent API
[英]Is it possible to create an association between two normal fields in Entity Framework, thereby ignoring the primary key?
我在這三個表之間有以下情況:
在我開始解釋我在這里要完成的任務之前,讓我澄清三件事:
我在EntityFramework上繪制了模型,但這實際上是數據庫視圖。 假設字段類型在表之間匹配;
我知道這個數據庫模型很糟糕。 但改變它是不可能的。 我知道這會讓我的生活更輕松。
我在這個項目上使用Visual Studio 2008和.Net 3.5。 但我也接受基於Visual Studio 2010和.Net 4.0的解決方案。
所以,正如我試圖在上面的圖片中展示的那樣,在我正在研究的這個項目中,我得到了這3個表。 其中之一TransactionLine將文件關聯到事務行,該事務行是完整事務的一部分。
現在,我在這里想要關聯的是TransactionLine和File 。 但是, TransactionLine沒有File表中的FileId字段。 此表中的字段FileNumber和FileType代表File上的復合鍵。 事實上, File的FileNumber和FileType永遠不會重復。 它們可能是主鍵,但話說再說一遍,我無法觸及數據庫結構。
我嘗試通過將一對多的關聯從文件轉換為TransactionLine來關聯TransactionLine和File 。 之后,我選擇Association並切換到Mapping Details屏幕,然后選擇Map to TransactionLine 。
他要我填寫模型屏幕的數據是:
所有TransactionLine標量屬性都由它們相應的數據庫字段設置,這些字段具有相同的名稱。 但是當我要指定與File表的鏈接時,我可以指定的唯一標量字段是FileId ,我在TransactionLine表上沒有。
我還嘗試將File的FileNumber和FileType標量屬性實體鍵標志設置為true,並將FileId實體標志設置為false,但沒有成功,因為程序警告我數據庫FileId是主鍵但是沒有像上一樣設置實體。
是否可以將TransactionLine FileNumber和FileType與File鏈接? 這種情況有沒有解決方法?
特別注意: FileId確實是File的主鍵。 其他表格通過此字段與其鏈接。 TransactionLine是常識規則的一個例外。 :(
我們達到了目標:D。
感謝Wily博士的Apprentice為我們提供了解決方案的提示。
這是我們做的:
我們創建了一個名為VIEWFILEEXTRA的視圖,其中只包含我們要在關聯中使用的字段;
之后,我們基於這個視圖創建了一個名為FileExtra的實體;
將FileExtra映射到VIEWFILEEXTRA,如果尚未完成;
將FileExtra Entity Key標志中的FileNumber和FileType更改為true;
從File中刪除FileNumber和FileType標量屬性;
在文件和FileExtra之間創建1對1關聯;
在關聯映射中設置標量屬性以指向File的數據庫字段FileNumber和FileType;
在FileExtra和TransactionLine之間創建1到多個關聯;
將關聯映射指向TransactionLine,並設置字段。
就是這樣。 非常感謝您的關注和提示:D。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.