2017-04-07 57 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,以便您可以在继承的类中重写它们以提供一些替代行为。