EF CTP4 Отсутствующие столбцы в сгенерированной таблице
У меня проблема, которую я просто не могу понять. Допустим, у меня есть 2 сущности, определенные в моем домене; Человек и Документ. Ниже приведено определение для документа:
public class Document
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public string Title { get; set; }
public DateTime Date { get; set; }
public virtual Person Owner{ get; set; }
public virtual Person AssignedTo { get; set; }
}
Теперь, когда EF CTP4 создает таблицу SQL при инициализации, существует только одно сопоставление поля для Person.Id, являющегося Owner_id. Что бы я ни пытался, поле для AssignedTo никогда не создается.
Что-нибудь, что могло бы решить это?
С Уважением,
avsomeren
1 ответ
Ваш код отлично создал желаемую схему в базе данных для меня:
Если вы не получите эту схему в своей БД, то я предполагаю, что что-то не так с остальной частью вашей объектной модели. Не могли бы вы опубликовать свою полную объектную модель, пожалуйста?
Другое решение:
Хотя ваш текущий класс Document даст вам желаемые результаты, но вы все равно можете воспользоваться Конвенциями для Code First и явно указать FK для ваших свойств навигации:
public class Document
{
public int Id { get; set; }
[Required][StringLength(255)]
public string Title { get; set; }
public DateTime Date { get; set; }
public int OwnerID { get; set; }
public int AssignedToID { get; set; }
public virtual Person Owner { get; set; }
public virtual Person AssignedTo { get; set; }
}
Code First теперь сделает вывод, что любое свойство с именем <имя свойства навигации><имя свойства первичного ключа> (например, OwnerID) с тем же типом данных, что и первичный ключ (int), представляет собой внешний ключ для отношения.
По сути, это приводит к той же схеме БД, к тому же у вас есть FK на объекте Document, а также свойства навигации, что дает вам максимальную гибкость для работы с вашей моделью.