Asp.net

實體框架 4(使用 EDMX),如何將欄位添加到數據庫實際上沒有該欄位的模型中

  • April 23, 2012

我需要將一個欄位添加到數據庫實際上沒有該欄位的模型中。

因為,首先我嘗試僅將欄位添加到實體類中。

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:...

有人知道如何將新欄位添加到實體類中嗎?

謝謝!

EDITED FOR:如果您的模型是您的數據庫的表示並且在數據庫中您沒有該欄位,為什麼要手動添加它?

=>

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

在將數據從控制器傳遞到視圖之前,我需要將更多數據(欄位)添加到 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

我希望它可以解釋這個問題:)

再次感謝。

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

在與自動生成的類相同的程序集和命名空間中創建一個新文件 WebOrderPart.cs,其中包含:

public partial class Weborder
{
 public string newField1 {get; set;} 
 public string newField2 {get; set;} 
}

引用自:https://stackoverflow.com/questions/10281897