2017-02-13 14 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 добавил два раза, то это было бы очень плохо, так как они будут получать дубликат материала.

В моем коде я мог проверить, существует ли он, прежде чем добавлять его, но полагается на всех, зная, что он должен быть уникальным.

Есть ли способ заставить это на модели (желательно с аннотациями данных)?

ответ

0

Вы ищете отношения «один-к-ноль-один».

Вы действительно можете использовать DataAnnotations для выполнения того, что вы пытаетесь сделать, но у вас должна быть промежуточная таблица, которая отслеживает отношения между клиентом и кампанией и возвращает FK в таблицу кампании. Затем с магией Entity Framework, она CustomerMarketingCampaignId будет как PK из CustomerMarketingCampaign и FK обратно 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

Мое окончательное решение для потомков:

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; } 
} 
Смежные вопросы