2017-04-07 61 views
0

我在Visual Studio項目中添加了一個新的ADO.Net EDM項目。爲什麼EDM類是偏分類

using System; 
using System.Data.Entity; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Diagnostics; 

namespace Rajat.Personal.EF 
{ 
    public partial class PracticeContext : DbContext 
    { 
     public PracticeContext() 
      : base("name=LocalContext") 
     { 
      this.Database.Log = s => Debug.WriteLine(s); 
     } 

    public virtual DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>() 
      .Property(e => e.firstname) 
      .IsUnicode(false); 

     modelBuilder.Entity<User>() 
      .Property(e => e.lastname) 
      .IsUnicode(false); 

     modelBuilder.Entity<User>() 
      .Property(e => e.emailaddress) 
      .IsUnicode(false); 

     modelBuilder.Entity<User>() 
      .Property(e => e.password) 
      .IsUnicode(false); 
    } 
} 

}

我有2個問題

  1. 爲什麼PracticeContext分部類?
  2. 爲什麼用戶屬性是虛擬的?
+0

他們背後的原因:(1)部分類用於將自動生成的代碼與業務邏輯代碼分開,然後將其編譯爲單個類。 (2)虛擬'DbSet'屬性實現了所謂的延遲加載機制,它可以覆蓋繼承的類。 –

+0

建議您需要刷新OO和C#基礎知識。 – niksofteng

回答

2

它生成爲partial class,以便您可以將該類擴展到單獨的文件中,並避免在下次重新生成上下文時丟失任何編輯。

它使用屬性上的virtual,以便您可以在繼承的類中重寫它們以提供一些替代行爲。