5

假設我有一個名爲Products的表的數據庫。所以,我通過Db優先方法,在VS 2012中創建了一個EF模型,其中pluralize and singularize選項。如何定義自定義命名約定如果EF 5

因此,該模型爲我創建了一個Product實體,默認命名約定將此實體映射到dbo.Products表。

現在我想改變這種行爲。實際上,我想創建一個自定義約定來將ProductModel實體映射到dbo.Products表。

這可能嗎?!如果是這樣,怎麼樣?

更新:我的目標做...

你知道,當你從更新數據庫模型,如果它導致模型中的變化,自動生成的實體將被覆蓋。

從另一方面,我想補充數據註解屬性實體屬性,這樣我可以用它來塑造自己的看法,並希望簡單地用我的DbContext像下面插入工作:

public ActionResult Create(Product product) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(product); 
    } 

的問題是我的應用程序分析未完成,數據庫更改時間。所以,我需要從數據庫更新模型,之後,我的所有屬性都將被刪除。

因此,我決定創建一個ProductModel類並將Product代碼複製到它,並將視圖作爲視圖模型傳遞給它。然後,whene我想查詢我的分貝,我會得到它說,dbo.ProductModels名稱未在數據庫中存在的異常...

在此先感謝

+0

不......!我可以,但我不想調整.edmx和它的實體 – AminSaghi

+1

那麼現在我完全失去了(a)你想做什麼,和(b)你的問題真的是什麼...... 。我所知道的唯一的*約定是EF ** 6 **將爲代碼優先開發帶來的自定義慣例。沒有別的東西存在,恐怕 –

+0

親愛的朋友們!我更新了我的Q並添加了一些解釋... – AminSaghi

回答

3

默認情況下,一個數據庫,第一種方法將始終將一個表名稱映射到同名實體(可能是複數/單數化)。 EF目前沒有規定通過慣例或工具來調整。您可以更改/修改/自定義您的模型 - 但是如果您重新生成模型,那些更改將會丟失。我不知道任何工具/腳本/黑客以某種方式「保留」這些更改,並在從數據庫重新生成模型後重新應用它們。

如果需要擴展生成我建議使用的事實,這些都是部分類 - 你可以在第二個物理文件擴展生成的類:

寫在一個單獨的文件,例如ProductExtension.cs

public partial class Product 
{ 
    // add your custom methods etc. here 
} 

構成該類將由C#編譯器爲你一起合併成一類的那些各種文件。

如果你需要數據的註釋添加到現有的生成的類,你可以使用MetadataType(..)屬性as shown in this SO question and its answers

寫在一個單獨的文件,例如ProductExtension.cs

[MetadataType(typeof(ProductMetaData))] 
public partial class Product 
{ 
} 

,然後在另一個文件中定義元數據/數據註釋爲您的產品類,ProductMetadata.cs,像這樣:

public class ProductMetaData 
{ 
    [Required] 
    public int RequestId {get;set;} 
    //... 
}