EF6.1迁移自动添加未引用子类属性问题咨询(SQL Server环境)
解决EF6自动添加未引用子类属性的迁移问题
嘿,这种情况我之前在EF6项目里踩过坑!问题出在EF的默认继承策略上——当你的User类有子类(哪怕这些子类在别的命名空间,也没被你的MyContext直接引用),EF会自动启用**TPH(表继承)**模式,把所有子类的属性都塞进同一个表的迁移里,哪怕你根本没打算映射这些子类。下面是几个可行的解决办法:
显式忽略不需要的子类
如果那些子类完全不需要被EF映射,直接在OnModelCreating方法里把它们排除掉就行:protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 替换成你项目里实际的子类类型 modelBuilder.Ignore<AdminUser>(); modelBuilder.Ignore<GuestUser>(); base.OnModelCreating(modelBuilder); }修改继承策略(如果需要映射子类)
要是你确实需要映射这些子类,但不想用默认的TPH(所有子类属性放同一张表),可以改用TPT(每个类单独一张表):protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 给每个子类指定单独的表 modelBuilder.Entity<AdminUser>().ToTable("AdminUsers"); modelBuilder.Entity<GuestUser>().ToTable("GuestUsers"); base.OnModelCreating(modelBuilder); }限制EF的实体扫描范围
EF6默认会扫描当前程序集和所有引用程序集里的实体类,哪怕你没在DbContext里声明IDbSet。你可以显式告诉EF只处理User:protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 只注册User实体,EF就不会自动发现其他子类 modelBuilder.Entity<User>(); base.OnModelCreating(modelBuilder); }清理旧迁移文件(如果之前的迁移已经混入了多余属性)
如果之前生成的迁移已经包含了那些子类的属性,可能会干扰新迁移的生成。先备份好现有迁移,然后删除多余的迁移文件,重新执行:Add-Migration MySetup -Force这样生成的新迁移就只会包含
User实体的配置了。
内容的提问来源于stack exchange,提问作者StefanG
相关产品推荐
相关产品推荐

