2017-04-07 2 views
0

Visual Studio Porjectに新しい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); 
    } 
} 

}

私はなぜPracticeContextは部分クラスである2つの質問

  1. がありますか?
  2. なぜユーザーはバーチャルプロパティですか?
+0

その理由は次のとおりです。(1)自動生成コードをビジネスロジックコードから分離し、その後で単一クラスとしてコンパイルするために使用される部分クラス。 (2)仮想 'DbSet'プロパティは、継承されたクラスでオーバーライド可能ないわゆる遅延ロードメカニズムを有効にします。 –

+0

OOとC#の基本をブラッシュアップする必要があります。 – niksofteng

答えて

2

partial classとして生成されるため、クラスを別のファイルに拡張し、次にコンテキストを再生成するときに行った編集を失うことはありません。

プロパティではvirtualを使用しているため、継承されたクラスでオーバーライドしていくつかの代替動作を提供できます。

関連する問題