У меня есть проект POCO с первым кодом, в котором я пытаюсь настроить существующую базу данных так, чтобы она синхронизировалась с тем, что ожидает EF, учитывая мою существующую модель.
У меня есть эти сущности:
public class FlaggedDate
{
[Key]
public long scheduledDayID { get; set; }
[Required]
public DateTime date { get; set; }
[StringLength(50)]
[Required]
public string dateStatus { get; set; }
[Required]
public bool isVisit { get; set; }
[Required]
public bool hasAvailableSlots { get; set; }
[Required]
public bool hasInterviewsScheduled { get; set; }
// navigation properties
public ICollection<ScheduledSchool> scheduledSchool { get; set; }
public ICollection<Interview> interviews { get; set; }
public ICollection<PartialDayAvailableBlock> partialDayAvailableBlocks { get; set; }
public Visit visit { get; set; }
public ICollection<Event> events { get; set; }
}
и
public class Visit
{
[Key]
public long flaggedDateScheduledDayID { get; set; }
[Required]
public bool isFullDay { get; set; }
// navigation property
public FlaggedDate flaggedDate { get; set; }
}
Соотношение между этими двумя значениями равно 1: 0 | 1, т. Е. FlaggedDate будет существовать, но может иметь или не иметь соответствующий единственный объект Visit.
EF считает, что на основе этой модели у FlaggedDate должно быть дополнительное поле visit_flaggedDateScheduledDayID, которое можно обнулять. Я наконец понял, почему: он считает, что поле Visit, flaggedDateScheduledDayID, является столбцом идентификаторов. Это не должен быть столбец идентификации; это должен быть внешний ключ, который подключается к FlaggedDate.
Я думаю, что это происходит по соглашению: я помню, как читал что-то о том, что в CTP4 любое поле, которое является одним ключом и имеет значение int или long, считается столбцом идентификации.
Можно ли как-нибудь сказать EF, что это НЕ столбец идентификации? Я попытался поиграть с Fluent API, но для меня это загадка, и нет аннотаций данных, которые вы можете использовать для этого.
Или, в качестве альтернативы, я могу поэкспериментировать со свойствами навигации, чтобы все получилось правильно?