Наследование таблиц типов с помощью EF 4.1 Fluent Code First - PullRequest
0 голосов
/ 04 сентября 2011

У меня есть следующие таблицы

Item
-------------------
ItemId (PK)
Name

Properties
-------------------
PropertyId (PK)
Name

ItemProperties
-------------------
ItemId (FK) (CPK)
PropertyId (FK) (CPK)
Value

и следующие классы

class Item{
     ItemId;
     Name;
     Properties (Collection of type ItemProperty);
}

class Property{
     PropertyId;
     Name;
}

class ItemProperty : Property{
     Value;
}

Использование EF Fluent API, как мне сопоставить вышеперечисленное.

1 Ответ

1 голос
/ 04 сентября 2011

Чтобы сделать комментарий @ Eranga более понятным. Ваша база данных не является наследованием, это взаимосвязь «многие ко многим» с дополнительными данными в соединительной таблице! Это отображается следующим образом:

public class Item 
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ItemProperty> Properties { get; set; }
}

public class Property
{
    public int PropertyId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ItemProperty> Items { get; set; }
}

public class ItemProperty
{
    public int ItemId { get; set; }
    public int PropertyId { get; set; }
    public int Value { get; set; }
    public virtual Item Item { get; set; }
    public virtual Property Property { get; set; }
}

И отображение:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ItemProperty>().HasKey(ip => new { ip.ItemId, ip.PropertyId });

    modelBuilder.Entity<Item>()
                .HasMany(i => i.Properties)
                .WithRequired(ip => ip.Item)
                .HasForeignKey(ip => ip.ItemId); 
    modelBuilder.Entity<Property>()
                .HasMany(p => p.Items)
                .WithRequired(ip => ip.Property)
                .HasForeignKey(ip => ip.PropertyId); 
}
...