首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架TPH继承错误:

实体框架TPH继承错误:
EN

Stack Overflow用户
提问于 2012-12-04 16:55:01
回答 1查看 2.2K关注 0票数 3

我得到了错误消息;error3032:映射从第77行开始的片段时出现问题:映射了条件成员'Company.CompanyTypeId‘和'IsNull=False’以外的条件。删除Company.CompanyTypeId上的条件或将其从映射中删除。

我已经做了一个关于如何解决这个问题的搜索,但我不明白答案。

我的类是

代码语言:javascript
复制
public abstract class Company
    {
        public Company()
        {
            this.AddressLines = new List<AddressLine>();
        }

        public int CompanyId { get; set; }
        public int CompanyTypeId { get; set; }

        public string Comments { get; set; }

        public DateTime? EndOfBusinessDate { get; set; }


        public virtual CompanyType CompanyType { get; set; }
    }

    public class Subcontractor : Company
    {
        public Subcontractor()
        {
            this.SubcontractorTrades = new List<SubcontractorTrade>();
        }

        public virtual ICollection<SubcontractorTrade> SubcontractorTrades { get; set; }
        public string ValueOfWork { get; set; }
        public string QualityAssured { get; set; }
        public int? NumberOfOperatives { get; set; }


        public static IPagedList<Subcontractor> GetSubcontractors(int page, int PageSize)
        {
            using (var db = new SherryGreenGroupContext())
            {
                return db.Subcontractors
                    .Include("SubcontractorTrades")
                    .Include("AddressLines")
                    .Where(x => x.EndOfBusinessDate == null)
                    .OrderBy(x => x.Company1)
                    .ToPagedList(page, PageSize);
            }
        }
    }

我的映射看起来像这样;

代码语言:javascript
复制
   public CompanyMap()
    {
        // Primary Key
        this.HasKey(t => t.CompanyId);

        // Properties
        this.Property(t => t.Comments).HasMaxLength(1023);

        // Table & Column Mappings
        this.ToTable("Company");
        this.Property(t => t.CompanyId).HasColumnName("CompanyId");

        this.Property(t => t.CompanyTypeId).HasColumnName("CompanyTypeId");
        this.Property(t => t.Comments).HasColumnName("Comments");
        this.Property(t => t.Created).HasColumnName("Created");

        // Relationships
        this.HasRequired(t => t.CompanyType).WithMany(t => t.Companies).HasForeignKey(d => d.CompanyTypeId);
    }
}

public class SubcontractorMap : EntityTypeConfiguration<Subcontractor>
{
    public SubcontractorMap()
    {
        this.Property(t => t.QualityAssured).IsFixedLength().HasMaxLength(1);
        this.Property(t => t.ValueOfWork).HasMaxLength(255);

        this.Property(t => t.QualityAssured).HasColumnName("QualityAssured");
        this.Property(t => t.ValueOfWork).HasColumnName("ValueOfWork");
        this.Property(t => t.NumberOfOperatives).HasColumnName("NumberOfOperatives");
    }
}

context类如下所示

代码语言:javascript
复制
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new CompanyMap());
        modelBuilder.Configurations.Add(new SubcontractorMap());
        modelBuilder.Configurations.Add(new SupplierMap());
        modelBuilder.Configurations.Add(new ArchitectsAndSurveyorMap());
        modelBuilder.Configurations.Add(new StructuralEngineerMap());
        modelBuilder.Configurations.Add(new CostConsultantMap());
        modelBuilder.Configurations.Add(new ServiceEngineerMap());
        modelBuilder.Configurations.Add(new CompanyTypeMap());
                    modelBuilder.Entity<Company>()
            .Map<Subcontractor>(m => m.Requires("CompanyTypeId").HasValue(4))
            .Map<Supplier>(m => m.Requires("CompanyTypeId").HasValue(5))
            .Map<ArchitectsAndSurveyor>(m => m.Requires("CompanyTypeId").HasValue(1))
            .Map<StructuralEngineer>(m => m.Requires("CompanyTypeId").HasValue(2))
            .Map<CostConsultant>(m => m.Requires("CompanyTypeId").HasValue(3))
            .Map<ServiceEngineer>(m => m.Requires("CompanyTypeId").HasValue(6));
    }
}

我尝试从类定义和映射代码中注释掉CompanyTypeId,但我得到了相同的错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-04 18:38:54

如果你想使用CompanyTypeId作为TPH的鉴别器,你不能将它用于任何其他的=>,你不能将它作为Company类的属性,也不能与CompanyType类有关系。原因是继承中的实体类型是不可变的。在Company类中更改CompanyTypeIdCompanyType都会更改实体的类型,但不能更改现有实例的类型。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13699117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档