3

エラーメッセージが表示されます。エラー3032:77行目から始まるフラグメントのマッピングに問題があります。条件メンバー「Company.CompanyTypeId」が「IsNull=False」以外の条件でマッピングされています。Company.CompanyTypeIdの条件を削除するか、マッピングから削除します。

修正方法を検索しましたが、答えがわかりません。

私のクラスは

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);
            }
        }
    }

私のマッピングは次のようになります。

   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");
    }
}

コンテキストクラスは次のようになります

    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をコメントアウトしようとしましたが、同じエラーが発生します

4

1 に答える 1

7

CompanyTypeIdをTPHの識別子として使用する場合は、他の目的で使用しないでください=>クラスのプロパティとして使用したり、Companyクラスとの関係を設定したりすることはできませんCompanyType。その理由は、継承のエンティティタイプが不変であるためです。CompanyTypeIdまたはクラスCompanyType内で変更Companyすると、エンティティのタイプが変更されますが、既存のインスタンスのタイプを変更することはできません。

于 2012-12-04T10:38:54.057 に答える