Я пытаюсь создать таблицы с помощью подхода, основанного на кодах. У меня есть две таблицы "CrimeReport" и "ReportDescription", и у них есть отношения "один к одному".
[Table("CrimeReport")]
public class CrimeReport
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int ImageId { get; set; }
public virtual ReportDescription ReportDescription { get; set; }
}
[Table("ReportDescription")]
public class ReportDescription
{
[Key]
public int ImageId { get; set; }
public virtual CrimeReport CrimeReport { get; set; }
}
Я получаю исключение, когда пишу команду "add-migration try" внутри консоли пакета.
Невозможно определить главный конец ассоциации между типами "codefirst.Models.ReportDescription" и "codefirst.Models.CrimeReport". Основной конец этой ассоциации должен быть явно сконфигурирован с использованием свободного API или аннотаций данных.
Вам необходимо отметить ReportDescription.CrimeReport
с атрибутом [Required]
:
[Table("ReportDescription")]
public class ReportDescription
{
[Key]
public int ImageId { get; set; }
[Required]
public virtual CrimeReport CrimeReport { get; set; }
}
В противном случае EF не может определить, что CrimeReport
и ReportDescription
являются обязательными: требуемые отношения и разделяют ImageId
как ключ.
Эквивалентное отображение FluentAPI будет:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ReportDescription>()
.HasRequired(x => x.CrimeReport)
.WithRequiredDependent(x => x.ReportDescription);
}
ModelState.IsValid
имеет значение true? Вы проверили, что строка подключения действительно указывает на правильную базу данных?