2016-09-15 2 views
2

Структура базы данных
Я получил очень Денормализованные таблицу SQL со структурой, как это:Может ли таблица быть разделенной на классы EF с отношением «один-ко-многим»?

CREATE TABLE logistix.shipments 
(
    shipment_id INT NOT NULL PRIMARY KEY, 
    destination_id NVARCHAR(15) NOT NULL PRIMARY KEY, 
    pallet_id INT NOT NULL PRIMARY KEY, 
    destination_order INT NOT NULL, 
    pallet_description NVARCHAR(40) NOT NULL 
) 

Хотя каждая конкретная запись является уникальной, одна партия может иметь несколько поддонов, идущие по нескольким адресам.

.NET Интерфейс
Это будет манипулировать объектами EF, которые я хочу, чтобы структурировать так:

class ShippingContext : DbContext 
{ 
     public virtual DbSet<Shipment> Shipments {get; set;} 
} 

class Shipment 
{ 
    int ShipmentId {get; set;} 
    List<Destination> ShipmentStops {get; set;} 
} 

class Destination 
{ 
    string DestinationId {get; set;} 
    int DestinationOrder {get; set;} 
    List<Pallet> Pallets {get; set;} 
} 

class Pallet 
{ 
    int PalletId {get; set;} 
    string PalletDescription {get; set;} 
} 

Проблема
Хотя я нашел учебники по расщеплению таблицы в индивидуальные объекты и при сопоставлении данных с внешними ключами в коллекциях в EF, я ничего не могу найти о сопоставлении столбцов из одной таблицы в коллекции. Возможно ли это, или ограничено ли я разбиением таблицы, созданием представлений или созданием класса POCO со свойством для каждого столбца?

Endmatter
Другого приложение будет иметь доступ к таблице SQL для создания отчетов по произвольному числу партий, поэтому власть имущих решил использовать денормализованную таблицу ради спектакля, а не набор нормированных столов и который будет занимать больше времени.

ответ

2

Ваши классы должны выглядеть ссылка это

public class ShipmnetContext : DbContext 
{ 
    public DbSet<Shipment> Shipments { get; set; } 
    public DbSet<Destination> Destinations { get; set; } 
    public DbSet<Pallet> Pallets { get; set; } 
} 

public class Shipment 
{ 
    public int ShipmentId { get; set; } 
    public ICollection<Destination> ShipmentStops { get; set; } 

    public Shipment() 
    { 
     ShipmentStops = new HashSet<Destination>(); 
    } 
} 

public class Destination 
{ 
    [Key] 
    public string DestinationId { get; set; } 
    public int DestinationOrder { get; set; } 
    //[Required] 
    public Shipment Shipment { get; set; } //Foreign key to Shipment table, make property NotNull by adding [Required] attribute 
    public ICollection<Pallet> Pallets { get; set; } 

    public Destination() 
    { 
     Pallets = new HashSet<Pallet>(); 
    } 
} 

public class Pallet 
{ 
    public int PalletId { get; set; } 
    public string PalletDescription { get; set; } 
    public Destination Destination { get; set; } //Foreign key to Destination table 
} 
+0

mulţumesc мульт! Как написать один из них? – JAF