2015-11-10 1 views
0

ConsumerNM - это таблица/объект NM/bridge.Число свойств в зависимых и основных ролях в ограничении отношений должно быть одинаковым?

Его отношение 1: N к таблице событий.

Когда я делаю вставку, я получаю исключение заголовка вопроса.

Что мне нужно изменить, чтобы заставить его работать?

DO Я должен создать 2 внешних ключа, каждый из которых указывает на другой потребительNM_Key?

public class ConsumerNM 
{ 
     public ConsumerNM() 
     { 
      Events = new HashSet<Event>(); 
     } 

     [Key] 
     [Column(Order = 0)] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int FK_LEADMETA { get; set; } 

     [Key] 
     [Column(Order = 1)] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int FK_LEADCONSUMER { get; set; } 

     public virtual ICollection<Event> Events { get; set; }  
} 

public class Event 
    { 
     [Key] 
     public int Id { get; set; } 

     public DateTime EventDate { get; set; }  

     public virtual ConsumerNM Consumer { get; set; } 

     [ForeignKey("Consumer")] 
     public int FK_Consumer { get; set; } 

    } 
+0

ПК «ConsumerNM» состоит из двух значений: «FK_LEADMETA» и «FK_LEADCONSUMER». Класс Event имеет FK 'ConsumerNM', но он имеет только одно свойство. 'Событие' должно быть' FK_LEADMETA' и 'FK_LEADCONSUMER' –

ответ

0

ConsumerNM или Event неверны. У вас есть два варианта:

Первый вариант:

public class ConsumerNM 
{ 
     //This is not a PK 
     //[Key] 
     //[Column(Order = 0)] 
     //[DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int FK_LEADMETA { get; set; } 

     [Key] 
     public int FK_LEADCONSUMER { get; set; } 
} 

Event остается неизменной.

Второй вариант:

public class Event 
{ 
    [Key] 
    public int Id { get; set; } 

    public DateTime EventDate { get; set; }  

    public virtual ConsumerNM Consumer { get; set; } 

    [ForeignKey("Consumer")] 
    public int FK_LEADCONSUMER { get; set; } 

    [ForeignKey("Consumer")] 
    public int FK_LEADMETA { get; set; } 

} 

ConsumerNM остается неизменной.

+0

Я бы выбрал второй вариант. Я решил это сейчас через беглый api. Итак, ForeignKey и его строковое имя «Потребитель» должны совпадать с именем свойства свойства навигации в том же классе Event? – Elisabeth

+0

Да, строка внутри атрибута '[ForeingKey()]' должна совпадать с именем свойства навигации. Если FK составлен более чем одним значением, вы должны поместить '[ForeingKey]' прежде всего из них –

+0

Я думал, что должен делать это в Event.cs: ForeignKey («ParentTable.Key1, ParentTable.Key2») разделен запятой , – Elisabeth

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