1

Я пытаюсь создать много-ко-многим между следующими объектами:Entity Framework CodeFirst со многими-ко-многим через DataAnnotations

public class Classified{ 
    [Key] 
    public int Id {get;set;}  
    public string details {get;set;} 
    public ICollection<ClassifiedRating> Ratings {get;set;} 
} 

public class User{ 
    [Key] 
    public int Id {get;set;} 
    public string Name {get;set;} 
} 

public class ClassifiedRating{ 
    [Key] 
    public User Rater {get;set;} 
    [Key] 
    public Classified Classified {get;set;} 
    public int rating {get;set;} 
}  

я получаю следующие ошибки, когда я запускаю его:

One or more validation errors were detected during model generation: 

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'ClassifiedRating' 
has no key defined. Define the key for this EntityType. 

\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'ClassifiedRating' 
is based on type 'RateUser' that has no keys defined. 

(символ «\ т» 's появляются в сообщении об ошибке, а также, хотя я сомневаюсь, что это имеет отношение, это своего рода странно ....)

ответ

3

насколько я знаю, ключ должен быть либо строкой, inte тип ger или объект Guid. В основном это заставляет вас всегда иметь искусственный ключ для каждого класса, который вы хотите сохранить, но в целом это хорошая идея. Попробуйте дать ClassifiedRating целочисленный ключ вместо того, чтобы пытаться использовать класс User.

+0

Да, это правильно, ПК в БД должен находиться на фактическом столбце, а свойство пользователя в вашей модели - только навигация. –

+0

спасибо, я этого не знал. это работает, теперь еще одна ошибка, которая не указана –

1

ClassifiedRating должен выглядеть следующим образом:

public class ClassifiedRating 
{ 
    [Key, Column(Order = 0)] 
    public int RaterId { get; set; } 

    [Key, Column(Order = 1)] 
    public int ClassifiedId { get; set; } 

    public User Rater {get;set;} 
    public Classified Classified { get; set; } 

    public int rating { get; set; } 
} 

соглашение об именовании обнаружит две части составного первичного ключа в качестве внешнего ключа для двух других таблиц, и вы должны получить два один-ко-многим вам нужна ваша модель.

+0

Я буду использовать 'virtual' для объектов' User' и 'Class' – Jaider

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