2011-07-30 15 views
0

SQLテーブルを生成する2つのモデル(エンティティ)のナビゲーションプロパティを設定する方法を理解しようとしています。シナリオ:私は貨物と会社のモデル/エンティティを持っています。会社のモデルのCompanyIDを指すように、Shipment IDの3つのプロパティClientIDとShifpperIDとConsigneeIDを結びつける必要があります。出荷モデルの正しいナビゲーションプロパティとコンテキストの外観はどうなっていますか?Entity Framework 4/MVC3ナビゲーションのジレンマ

ここ
public virtual ICollection<Company> Companies { get; set; } 
     OR 
    public virtual Company Company { get; set; } 

は2つのモデルです:あなたの出荷は1つしかない場合は、あなたの出荷は(多くの関係に多くの)あなたが使用する必要があり、多くの企業、他

public virtual ICollection<Company> Companies { get; set; } 

を持っている場合

public class Shipment 
{ 
    public int ShipmentID { get; set; } 
    public string Name { get; set; } 
    public DateTime DateStamp { get; set; } 
    public int ClientID { get; set; } 
    public int ShipperID { get; set; } 
    public int ConsigneeID { get; set; } 

    public virtual ICollection<Company> Companies { get; set; } 
     OR 
    public virtual Company Company { get; set; } 
} 

public class Company 
{ 
    public int CompanyID { get; set; } 
    public string Name { get; set; } 
    public DateTime DateStamp { get; set; } 

    public virtual ICollection<Shipment> Shipments { get; set; } 
} 

答えて

2

あなたが使用する必要がある会社(1対多の関係)

public virtual Company Company { get; set; } 

そして、オプションで、dbContext内のonModelBuildingイベントで関係の詳細を指定することができます。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Shipment>() 
    .HasRequired(x => x.Company) \\..... etc as your requirement 
2

これを達成するには、いくつかの属性を使用する必要があります。 私はあなたが出荷と企業の間に1対1の関係があると仮定しています。 (出荷まで*クライアント/荷主/荷受人) 出荷:

public class Shipment 
{ 
    public int ShipmentID { get; set; } 
    public string Name { get; set; } 
    public DateTime DateStamp { get; set; } 
    [ForeignKey("Client")] 
    public int ClientID { get; set; } 
    [ForeignKey("Shipper")] 
    public int ShipperID { get; set; } 
    [ForeignKey("Consignee")] 
    public int ConsigneeID { get; set; } 

    public virtual Company Client { get; set; } 
    public virtual Company Shipper { get; set; } 
    public virtual Company Consignee { get; set; } 
} 

会社:

public class Company 
{ 
    public int CompanyID { get; set; } 
    public string Name { get; set; } 
    public DateTime DateStamp { get; set; } 
    [InverseProperty("Shipper")] 
    public virtual ICollection<Shipment> ShipmentsShipped { get; set; } 
    [InverseProperty("Consignee")] 
    public virtual ICollection<Shipment> ShipmentsConsigned { get; set; } 
    [InverseProperty("Client")] 
    public virtual ICollection<Shipment> ShipmentsOwned { get; set; } 
} 

コンテキスト:あなたの解決場合

public class TesteEntityMVCContext : DbContext 
{  
    public DbSet<Shipment> Shipments { get; set; } 
    public DbSet<Company> Companies { get; set; } 
} 
+0

は答えとしてこれをマークすることを忘れないでください問題! –