11

我需要添加一個字段到數據庫實際上沒有字段的模型。實體框架4(使用EDMX),如何添加一個字段到模型的DB實際上沒有字段

因爲,首先我試圖只將該字段添加到實體類。

public partial class Weborder 
{ 
    (Auto Generated) 
    public int orderno {get; set;} 
    . 
    . 
    . 
    (Add Manually) 
    public string newField1 {get; set;} //this is new field that DB does not have 
    public string newField2 {get; set;} //this is new field that DB does not have 
} 

和更高版本,當我更新EDXM時,EDMX刪除新字段,因爲數據庫沒有該字段。 。:(

所以我添加字段到手動模式EDMX(添加 - >標量屬性)

然後錯誤發生在編譯時,錯誤消息說:

Error 1 Error 3004: Problem in mapping fragments starting at line 399:No mapping specified for properties ... 
An Entity with Key (PK) will not round-trip when:... 

有人知道如何添加新的字段到實體類

謝謝

編輯的?! 如果我的模型是數據庫的一種表示形式,在數據庫中您沒有該字段,爲什麼要手動添加它?

=>

當檢索數據,對象的返回類型實體類。

在將數據從控制器傳遞到視圖之前,我需要在IQueryable結果中添加更多數據(字段)。

前)

public DbSet<WEBORDERLN> WEBORDERLNs { get; set; } 

//repository 
public IQueryable<WEBORDERLN> WebOrderLns 
{ 
     get { return context.WEBORDERLNs; } 
} 

,現在我得到了控制器weborderln數據。並在通過查看之前,我需要

添加額外的數據到結果中。

var data = webOrderLnRepository.WebOrderLns.Where(e => e.PICKNO == OrderNo).ToList(); 

foreach (WEBORDERLN weborderln in data) 
{ 
    weborderln.[NEW FIELD] = "EXTRA DATA"; //// FOR THIS, I NEED TO ADD NEW FILED INTO ENTITY CLASS 
} 

//return data 

我希望它能夠再次解釋這個問題:)

感謝。

+0

如果您的模型是數據庫的表示,並且在數據庫中沒有該字段,那麼爲什麼要手動添加它? – Dante 2012-04-23 13:57:49

+0

@丹特,謝謝你的關注。我再次編輯我的問題,請查看我的問題。如果您有任何想法,請諮詢我。 – 2012-04-23 14:15:03

+0

你基本上描述了ViewModel的使用場景 - 也就是說。模型從數據模型映射並從視圖派生,以便將數據傳遞給視圖(也可能從視圖中傳遞)。現在我一直想知道在Entity Framework本身中構建ViewModels是多麼容易(因爲我可能想要使用和查詢OData服務等),但我不知道它們真的屬於那裏。 – JayC 2012-04-23 14:19:14

回答

14

您必須在實體類(在新的.cs文件中)中創建一個新的部分部分並向該類添加新的字段。您不得修改由自動生成的部分部分,因爲每次更改EDMX文件時自動生成的文件都將被覆蓋。您也不能在EDMX中包含該字段,因爲EDMX定義了您到數據庫的映射=它僅包含數據庫中的字段。

創建同一程序和命名空間的新文件WebOrderPart.cs含有您自動生成類:

所有的
public partial class Weborder 
{ 
    public string newField1 {get; set;} 
    public string newField2 {get; set;} 
} 
+0

謝謝你的回答!你能否給我多一點提示:「你必須在你的實體類(在新的.cs文件中)創建一個新的部分部分,併爲這個類添加新的字段。」? – 2012-04-23 14:29:02

+0

檢查更新的答案。 – 2012-04-23 14:29:55

+0

我爲實體創建一個新類,並將所有原始代碼複製到新文件(WEBORDERLN2.cs)中,並將上下文和存儲庫返回類型對象修改爲WEBORDERLN2。但會出現錯誤,它會說「實體類型WEBORDERLN2不是當前上下文模型的一部分。」你有什麼想法嗎?謝謝! – 2012-04-23 14:36:47

6

Dosn't [NotMapped] work。

[NotMapped] 
public string newField1 {get; set;} 
3

首先,你不應該修改數據模型文件。這個文件代表你的數據。

其次,你不應該從你的Repository中返回你的數據模型對象/集合。這是一個非常糟糕的做法,因爲您正在Controller/View和Model之間創建依賴關係。我建議你創建自定義模型對象,它包含你在視圖中需要的屬性,將你的實體映射到這些模型對象,並且只從你的存儲庫返回模型對象或模型對象集合。

+0

非常感謝! – 2012-04-23 14:59:37

+0

不用擔心隊友;) – Dante 2012-04-23 15:02:36

相關問題