目前,我正在尝试将 Effort ( https://effort.codeplex.com/ ) 与我的 Entity Framework 6 解决方案一起使用,以允许在不需要数据库连接的情况下进行单元测试(请参阅http://www.codeproject.com/Articles/460175 /Two-strategies-for-testing-Entity-Framework-Effort)。一切都在我的项目中工作,这是DbContext
带有接口和 Effort 所需的重载构造函数:
namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class HRADDbContext : DbContext, IHRADDbContext
{
public HRADDbContext() : base("name=HRADDbContext")
{
}
public HRADDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
this.Configuration.LazyLoadingEnabled = false;
}
public HRADDbContext(DbConnection connection)
: base(connection, true)
{
this.Configuration.LazyLoadingEnabled = false;
}
public virtual DbSet<CCS_DEPT_TBL> CCS_DEPT_TBL { get; set; }
public virtual DbSet<CCS_HR_AD_SYNC> CCS_HR_AD_SYNC { get; set; }
}
}
问题是,如果我.edmx
通过选择“从数据库更新模型...”来更新文件,那么它会将上下文文件重新生成为:
namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Data.Common;
using System.Data.Entity;
public partial class HRADDbContext : DbContext
{
public HRADDbContext() : base("name=HRADDbContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<CCS_DEPT_TBL> CCS_DEPT_TBL { get; set; }
public virtual DbSet<CCS_HR_AD_SYNC> CCS_HR_AD_SYNC { get; set; }
}
}
Context.cs
所以我每次都得回去手动更新上面的文件。[Key]
此外,从POCO CCS_DEPT_TBL
文件 中删除。
有什么方法可以设置我的实体框架项目,这样每次我从数据库更新模型时,它就不会破坏接口和重载的构造函数?TIA。
更新:
由于类是部分的,我只是确保将接口和重载的构造函数放在一个不会自动生成的单独文件中。
更新 2:
好的,明白了,只是将其添加为单独的文件,DEPTID
从原始POCO
文件中取出,但它仍将其放入DEPTID
生成的文件中,因此在更新后构建中断,因为DEPTID
同一类中有两个值:
namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class CCS_DEPT_TBL
{
[Key]
public string DEPTID { get; set; }
}
}
那么,如何防止它DEPTID
在生成的类文件中生成,因为它已经在上面的部分类文件中了?