2016-04-21 184 views
-1

我創建了ADO.NET實體數據模型。我可以去哪裏查看實際的課程?我想檢查數據類型並添加一些DisplayName屬性。如何查看ADO.NET實體數據模型的代碼

這裏是從Solution Explorer模型:

enter image description here

感謝。

+0

http://www.entityframeworktutorial.net/create-poco-entity.aspx –

回答

0

當您從數據庫生成模型(這裏看起來就是這種情況)時,會創建幾個不同的代碼文件。要獲取上下文的代碼,請展開ProgramMasterList.Context.tt。你會看到一個.cs文件,用於上下文類。

然後,對於您從數據庫中選擇的每個表作爲模型的一部分,將創建一個實體類。你可以通過擴展ProgramMasterList.tt找到這些。例如,如果您有一個名爲Person的表,則可能有一個實體類文件Person.cs,其中定義了Person類。

現在,你提到想要修改類來添加屬性。如果您修改由實體框架動態生成的ProgramMasterList.tt下的類文件,那麼下次您從數據庫更新模型(例如將數據庫中的新表添加到模型中)時,您所做的任何更改將被覆蓋。幸運的是,還有更好的方法。 ProgramMasterList.tt下的每個班級是部分班。因此,您可以添加到該類而不修改實體框架自動生成的文件。只需創建一個新文件,聲明Person類(作爲部分),並在其中添加額外的方法,屬性等。我建議將所有這些「擴展名」放在一個文件夾中,以保持它們的組織性,但這取決於您。

因此,它可能是這個樣子:

解決方案結構:

  • ProgramMasterList.edmx
    • ProgramMasterList.Context.tt
      • ProgramMasterList.Context.cs
    • ProgramMasterList.Designer.cs
    • ProgramMasterList.edmx.diagram
    • ProgramMasterList.tt
      • Person.cs
  • 擴展
    • Person.cs

Person.cs(下ProgramMasterList.tt)

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated from a template. 
// 
//  Manual changes to this file may cause unexpected behavior in your application. 
//  Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace SomeNamespace 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Person 
    { 
     public Person() 
     { 
     } 

     public int PersonID { get; set; } 
     public string Name { get; set; } 
     public DateTime Birthdate { get; set; } 
    } 
} 

人。cs(在擴展文件夾中) 注意:確保命名空間與其他Person.cs文件中的命名空間完全匹配。

namespace SomeNamespace 
{ 
    public partial class Person 
    { 
     // Custom property (not auto-generated by Entity Framework) 
     public string DisplayName 
     { 
      get { return PersonID + " - " + Name + " (" + Birthdate.ToString() + ")"; } 
     } 
    } 
} 
+0

非常感謝。你如何在這些屬性中添加諸如'[Key]'和'[Required(ErrMessage =「」)]'這樣的屬性? –

+0

這些屬性在代碼優先模型中更常見。首先在數據庫中,您不是通過屬性,而是通過模型編輯器來設置密鑰。通常,EF會根據數據庫結構自動確定哪些列是主鍵,但如果出錯,您可以右鍵單擊實體內的某個屬性以更改它是否爲關鍵。至於「必需」屬性,您可以使該列不可爲空,但這不會允許您設置錯誤消息。我建議使用IValidatableObject接口進行驗證。 – TheRotag

相關問題