2017-02-13 4 views
0

子エンティティを一意にする最良の方法は何ですか?例えば、顧客は同じMarketingCampaignは、彼らが重複した材料を受け取ることになると、それは非常に悪いだろう倍を加えた場合のことを言うことができます子エンティティの一意性を強制しますか?

public class Customer 
{ 
    public int ID { get; set; } 

    public virtual ICollection<MarketingCampaign> MarketingCampaigns { get; set; } 

} 

public class MarketingCampaign 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

} 
私はMarketingCampaign

と呼ばれるCustomerエンティティと子エンティティのコレクションを持って言うことができます。

私のコードでは、追加する前にそれが存在するかどうかを確認できましたが、それは誰もが一意でなければならないことに頼っています。

これを強制的にモデルに付ける方法はありますか(データアノテーションがあることが望ましい)?

答えて

0

1対1対1の関係を探しています。

実際に行うことを達成するためにDataAnnotationsを使用できますが、顧客とキャンペーンの関係を追跡し、FKをキャンペーンテーブルに戻す仲介テーブルを用意する必要があります。そして、Entity Frameworkのの魔法で、それはCustomerMarketingCampaignIdが戻っCustomer

public class Customer 
{ 
    public int CustomerId { get; set; } 

    public virtual ICollection<CustomerMarketingCampaign> CustomerMarketingCampaign { get; set; } 

} 

public class CustomerMarketingCampaign 
{ 
    [ForeignKey("Customer")] 
    public int CustomerMarketingCampaignId 
    [ForeignKey("Campaign")] 
    public int CampaignId { get; set; } 

} 

public class Campaign 
{ 
    public int CampaignId {get;set;} 
    public string Name {get;set;} 
} 
+0

あなたは私の作成の例を表示することができますし、割り当てる? – Guerrilla

0

からCustomerMarketingCampaignのPKとFKの両方後世のための私の最終的な解決策になります。

public class Customer 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<CustomerMarketingCampaign> CustomerMarketingCampaigns { get; set; } 
} 
public class MarketingAction 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 
public class CustomerMarketingCampaign 
{ 
    public int ID { get; set; } 
    [Index("IX_CustomerAndMarketing", 1, IsUnique = true)] 
    public int CustomerID { get; set; } 
    [Index("IX_CustomerAndMarketing", 2, IsUnique = true)] 
    public int MarketingActionID { get; set; } 

    // I also have several properties not included for tracking the progress of the campaign 

    [ForeignKey("CustomerID")] 
    public virtual Customer Customer { get; set; } 
    [ForeignKey("MarketingActionID")] 
    public virtual MarketingAction MarketingAction { get; set; } 
} 
関連する問題