Основной конец этой ассоциации должен быть явно настроен

1

Я пытаюсь создать таблицы с помощью подхода, основанного на кодах. У меня есть две таблицы "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 или аннотаций данных.

Теги:
entity-framework
code-first
code-first-migrations

1 ответ

1
Лучший ответ

Вам необходимо отметить 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);
}
  • 0
    Большое спасибо, сэр ..... Я застрял плохо, и вы решили мою проблему. Можете ли вы сказать мне еще одну вещь? if (ModelState.IsValid) {using (UsersContext db = new UsersContext ()) {db.LoginData.Add (new LoginData {UserId = 1, Username = "ahealalo", Password = "master"}); db.SaveChanges (); }}} Я пишу этот код для сохранения данных в LoginData, но когда я проверяю свою базу данных, значения не устанавливаются, в чем проблема?
  • 0
    Это может стоить отдельного вопроса, так как требует более подробной информации. Тем не менее, вы убедились, что ваш ModelState.IsValid имеет значение true? Вы проверили, что строка подключения действительно указывает на правильную базу данных?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню