我们首先使用EntityFramework代码 我想将DbContext继承实现为:
public class AgileDbContextBase : DbContext
{
public DbSet<Account> Accounts { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// base.OnModelCreating(modelBuilder);
// TODO configure relations here!
modelBuilder.Configurations.Add(new AccountEntityConfiguration())
.Add(new UserEntityConfiguration());
}
}
和
public class LoadContext : AgileDbContextBase
{
#region Public Properties
public DbSet<ProjectLoadEstimate> ProjectLoadEstimates { get; set; }
public DbSet<OccupationType> OccupationTypes { get; set; }
public DbSet<LoadReport> LoadReports { get; set; }
#endregion
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ProjectLoadEstimateConfiguration())
.Add(new OccupationTypeEntityConfiguration())
.Add(new LoadReportEntityConfiguration());
}
}
其中一个实体使用AgileDbContextBase
上下文中的另一个实体,这里是:
public class LoadReport : BaseEntity
{
/// <summary>
/// The date of load report has been created
/// </summary>
public virtual DateTime Created { get; set; }
/// <summary>
/// The project manager
/// </summary>
public User ProjectManager { get; set; }
/// <summary>
/// The Id of project manager
/// </summary>
public int ProjectManagerId { get; set; }
}
两个上下文都在使用自动迁移。
问题是,当我尝试在LoadContext
上更新数据库时,PackageManager说
数据库中已有一个名为“帐户”的对象。
看起来它试图重新创建已经存在的表。怎么避免呢?
如何告诉代码优先来自LoadContext
它必须在数据库中创建唯一的表,这些表被定义为DbSet&lt;&gt;在LoadContext
?
(也许是一些解决方法)?
附:两个上下文都使用相同的连接字符串。
感谢您的时间!
答案 0 :(得分:1)
重写OnModelCreating方法并配置模型构建器以忽略所需的实体。
查看此博客文章了解更多详情 http://msdn.microsoft.com/en-us/data/jj591617.aspx