2011-08-08 6 views
0

私はEntity Frameworkを使用してデータレイヤを構築していますが、エンティティの参照フィールドをそのエンティティのキ​​ーに入れようとしています。参照フィールドをEF 4.1のエンティティキーの一部として使用

VS2010、.NET 4、EF 4.1、CodeFirstアプローチを使用します。製品と顧客エンティティは、それらのフィールドをSETIDているので

public class Customer 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int SetID { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public int CustomerId { get; set; } 
    public string CustomerName { get; set; } 
} 

public class Product 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int SetID { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
} 

public class SalesVolume 
{ 
    [Key] 
    [Column(Order = 0)] 
    public Product product { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public Customer customer { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public DateTime SalesDate { get; set; } 
    public double Value { get; set; } 
} 

すべての私のデータは、セットで構成されています。すべてのその情報は、次のコードサンプルをご検討ください考える

SalesVolumeについては、ProductエンティティおよびCustomerエンティティへの参照があり、これらの参照フィールドをSalesVolumeの複合主キーの一部にします。

CREATE TABLE [dbo].[SalesVolumes](
    [SalesDate] [datetime] NOT NULL, 
    [Value] [float] NOT NULL, 
    [product_SetID] [int] NULL, 
    [product_ProductId] [int] NULL, 
    [customer_SetID] [int] NULL, 
    [customer_CustomerId] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [SalesDate] ASC 
) 

製品と顧客の参照は二つのフィールドごとに配置され、それらが主キーの一部ではありません。私が求めていたものとは全く異なる は、上記のコードのために、EFは、次の表を生成しました。

EFに、setIDフィールドとPK:(setID、productID、customerID)の1つのみを含むSalesVolumeテーブルを生成するようにEFに指示するにはどうすればよいですか?

ありがとうございました。

+1

を。つまり、Customer_CustomerId、Customer_SetID、Product_SetID、およびProduct_ProductIDという別のプロパティです。それでもナビゲーションプロパティは保持することができます。 – BennyM

答えて

0

あなたは実際には外部キー関係を宣言する必要があります:あなたのsalesvolumesクラスで外部キーを追加してみてくださいし、それらのキー属性を追加

public class Customer 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int SetID { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public int CustomerId { get; set; } 
    public string CustomerName { get; set; } 

    public virtual ICollection<SalesVolume> SalesVolumes {get; set;} 
} 

public class Product 
{ 
    [Key] 
    [Column(Order = 0)] 
    public int SetID { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 

    public virtual ICollection<SalesVolume> SalesVolumes {get; set;} 
} 

public class SalesVolume 
{ 
    [Key] 
    [Column(Order = 0)] 
    public Product product { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public Customer customer { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public DateTime SalesDate { get; set; } 
    public double Value { get; set; } 
} 
関連する問題