2013-07-19 89 views
2

使用实体框架数据库优先时,会自动生成Model.Context.cs文件。如何使用实体框架从数据库更新模型后保留Model.Context.cs文件标头内容?

我已经修改了类的头部分是工作和Repository模式的单元相兼容:

public partial class MyDatabaseContext : DbContext, IDbContext 
{ 
    public MyDatabaseContext() 
     : base("name=MyDatabaseContextEntities") 
    { 
     // disable lazy loading for best practices - keeps from accidentaly loading large entity graphs 
     Configuration.LazyLoadingEnabled = false; 
    } 

    // refactored 
    public new IDbSet<T> Set<T>() where T : class 
    { 
     return base.Set<T>(); 
    } 

    public override int SaveChanges() 
    { 
     // this.ApplyStateChanges(); 
     return base.SaveChanges(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 
    . 
    . 
    . 

的问题是,每当我更新从数据库模型,显然,这个文件中获取覆盖。

我已经将有关的代码保存在* .config的注释部分中,只要将模型更新,只需将其复制/粘贴回原处即可。

尽管模型没有经常更新,但我想知道是否有一种方法可以保留这些内容,所以我不必经过额外的复制/粘贴步骤。

回答

2

对于添加的成员,您可以创建另一个包含该类的另一部分的文件。这个新文件不会被覆盖,因此您添加的任何内容都应该在更新之间保持不变。

对于不是新成员的更改(如构造函数中的添加行),可以直接编辑Model.Context.tt文件。这是一个简单的T4 Text Template,用于在模型更新时重新生成代码。它类似于ASP.NET页面;然而,它不是使用C#生成HTML,而是使用C#生成更多的C#。

相关问题