2013-03-03 2 views
1

У меня есть модель транзакции, которая имеет отношения «один к одному» с моделью обслуживания, а затем у модели Service есть много ServiceAddons.Один к одному/одному ко многим

public class Transaction 
{ 
    public int TransactionId {get;set;} 
    public string Username {get;set;} 
    public Service OccasionService {get;set;} 
} 

public class Service 
{ 
    [Key] 
    public int TransactionId {get;set;} 
    public Transaction Transaction { get; set; } 
    public virtual IList<ServiceAddon> ServiceAddons { get; set; } 
} 

public class ServiceAddon 
{ 
    public int ServiceAddonId { get; set; } 
    public int TransactionId { get; set; } 
    public int AddonId { get; set; } 
    public decimal AddonPrice { get; set; } 
    public virtual Addon Addon { get; set; } 
} 

Теперь консоль управления пакетами говорит мне, что OccasionServiceId не существует в ServiceAddon, поэтому я изменил TransactionID для нее, программа компилируется, но теперь он говорит Invalid колонка OccasionServiceId. Как это исправить?

ответ

2

Необходимо указать ForeignKey s, попробуйте что-то вроде этого. Я добавил комментарии к битам, которые неясны.

public class Transaction 
{ 
    [Key] 
    public int TransactionId {get;set;} 
    public string Username {get;set;} 

    // Whatever the column is 
    public int OccasionServiceId {get;set;} 

    [ForeignKey("OccasionServiceId")] // What on Transaction points to Service's Key 
    public Service OccasionService {get;set;} 
} 

public class Service 
{ 
    // Ideally this would be called ServiceId instead? 
    [Key] 
    public int TransactionId {get;set;} 

    // If this uses TransactionId then are you sure you don't need a Key that is ServiceId 
    public Transaction Transaction { get; set; } 

    [ForeignKey("TransactionId")] // What on ServiceAddon points at Service's Key 
    public virtual ICollection<ServiceAddon> ServiceAddons { get; set; } 
} 

public class ServiceAddon 
{ 
    [Key] 
    public int ServiceAddonId { get; set; } 

    // Don't you need a ServiceId here? 

    public int TransactionId { get; set; } 
    public int AddonId { get; set; } 
    public decimal AddonPrice { get; set; } 
    public virtual Addon Addon { get; set; } 
} 

Вот что мои модели будут выглядеть, если я сделал это:

public class Transaction 
{ 
    [Key] 
    public int TransactionId {get;set;} 
    public string Username {get;set;} 
    public int ServiceId {get;set;} 

    [ForeignKey("ServiceId")] 
    public Service Service {get;set;} 
} 

public class Service 
{ 
    [Key] 
    public int ServiceId {get;set;} 
    public int TransactionId {get;set;} 

    [ForeignKey("TransactionId") 
    public Transaction Transaction { get; set; } 

    [ForeignKey("TransactionId")] // What on ServiceAddon points at Service's Key 
    public virtual ICollection<ServiceAddon> ServiceAddons { get; set; } 
} 

public class ServiceAddon 
{ 
    [Key] 
    public int ServiceAddonId { get; set; } 
    public int ServiceId {get;set;} 

    [ForeignKey("ServiceId")] 
    public Service Service {get;set;} 
} 
+0

Спасибо за ваш ответ. Я попробовал, и менеджер пакетов сказал, что он не может определить главный конец связи между типами Сервис и Транзакция? – WannaCSharp

+0

Я думаю, что это может быть из-за вашего Service.TransactionId, который, кажется, является внешним ключом и первичным ключом? См. Мой второй фрагмент кода. –

+0

Это должно быть что-то вроде: 'Transaction.TransactionId 1 <-> 1 Service.TransactionId' и' Service.ServiceId 1 <-> * ServiceAddon.ServiceId' Я немного изменил ответ на 'ServiceAddon'. Удачи! В постель: P –

Смежные вопросы