2

使用 Entity Framework Database First 时会自动生成 Model.Context.cs 文件。

我已经修改了类的标题部分以与工作单元和存储库模式兼容:

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 的注释掉部分中,并在模型更新时简单地将其复制/粘贴回原处。

即使模型没有那么频繁地更新,我想知道是否有办法保留这些内容,这样我就不必经历复制/粘贴的额外步骤。

4

1 回答 1

3

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

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

于 2013-08-13T16:24:04.000 回答