我们首先使用EntityFramework代码
我想实现DbContext继承:
我想实现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说
There is already an object named ‘Accounts’ in the database.
看起来它试图重新创建已经存在的表.怎么避免呢?
如何告诉代码优先来自LoadContext它必须在数据库中创建唯一的表,这些表被定义为DbSet<>在LoadContext中?
(也许是一些解决方法)?
附:两个上下文都使用相同的连接字符串.
感谢您的时间!
解决方法
重写OnModelCreating方法并配置模型构建器以忽略所需的实体.
查看此博客文章了解更多详情
http://msdn.microsoft.com/en-us/data/jj591617.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。