EF Mapping多个属性相同的表。由于类型''不可用,因此未加载关系''

时间:2017-07-25 22:25:49

标签: c# entity-framework ef-code-first foreign-keys mapping

我有一个具有多个属性的类,可以映射到一个具有不同类型属性的表。 我这样做是为了没有几个表为每个属性具有相同的模式。 如下:

public class Flower : Entity
    {
        public Flower()
        {
            Events = new Collection<Event>();
        }

        public Guid Id { get; set; }

        public virtual User User { get; set; }

        public FlowerType Type { get; set; }

        public virtual ExtraInfoBase Family { get; set; }

        public virtual ExtraInfoBase Specie { get; set; }

        public virtual ExtraInfoBase Seller { get; set; }

        public string SellerObs { get; set; }

        public virtual ExtraInfoBase Localization { get; set; }

Extrainfobase是一个可以处理具有不同类型的所有属性的类:

 public class ExtraInfoBase
{
    public int Id { get; set; }
    public InfoType Type { get; set; }
    public string Value { get; set; }
    public string Extra { get; set; }
    public virtual Flower Flower { get; set; }
    public virtual User User { get; set; }
}

映射如下:

public class FlowerMap : EntityTypeConfiguration<Flower>
{
    public FlowerMap()
    {
        this.HasKey(t => t.Id);

        this.ToTable("Flowers");

        this.Property(t => t.Id)
            .HasColumnName("Id")
            .HasColumnType("uniqueidentifier");

        this.Property(t => t.Type)
            .IsRequired()
            .HasColumnName("Type");

        this.HasRequired(t => t.Family).WithRequiredPrincipal(x => x.Flower);

        this.HasRequired(t => t.Gender).WithRequiredPrincipal(x => x.Flower);

        this.HasRequired(t => t.Specie).WithRequiredPrincipal(x => x.Flower);`

public class ExtraInfoBaseMap : EntityTypeConfiguration<ExtraInfoBase>
{
    public ExtraInfoBaseMap()
    {
        this.HasKey(t => t.Id);

        this.ToTable("ExtraInfo");

        this.Property(t => t.Id)
            .HasColumnName("Id")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(t => t.Type)
            .IsRequired()
            .HasColumnName("Type");

        this.Property(t => t.Value)
            .IsRequired()
            .HasColumnName("Value");

        this.Property(t => t.Extra)
            .HasColumnName("Extra");

        this.HasRequired(x => x.Flower);
        this.HasRequired(x => x.User);
    }
}

我收到错误由于“ExtraInfoBase”类型不可用,因此未加载“Flower_Family”关系。 我究竟做错了什么? 请指教。

1 个答案:

答案 0 :(得分:0)

抱歉浪费你的时间。我昨晚很累,睡觉时有可能找到解决办法。关系是错误的。 Extrainfobase和花将有很多关系,所以模型是错误的。

对不起。