Как я могу выполнить каскад обновления в EF - PullRequest
0 голосов
/ 28 мая 2019

EF Database First:
У меня есть модель

public class Book {
  public Guid BookId { get;set; }
  public string BookName { get;set; }
  public string CategoryCode { get;set; } 
  public Category Category { get;set; }
}

public class Category {
  public Guid CategoryId { get;set; }
  public string CategoryName { get;set; }
  public string CategoryCode { get;set; }
}

Затем, в моем контексте у меня есть

        modelBuilder.Entity<Book>()
            .HasKey(c => c.BookId);

        modelBuilder.Entity<Book>()
            .Property(c => c.CategoryCode )
            .HasColumnName("Category");

        modelBuilder.Entity<Book>()
            .HasOne(c => c.Category)
            .WithMany()
            .HasForeignKey(c => c.CategoryCode )
            .HasPrincipalKey(bu => bu.CategoryCode );

Когда я пытаюсь обновить CategoryName, ошибка:
Свойство «CategoryName» типа объекта «Категория» является частью ключа и поэтому не может быть изменено или помечено как измененное.Чтобы изменить принципала существующей сущности с идентифицирующим внешним ключом, сначала удалите зависимого и вызовите «SaveChanges», а затем свяжите зависимого с новым принципалом.

Поэтому я пытаюсь включить Каскад обновления, но вижу только Вкл.удалить каскад.Так как я могу его обновить?

1013 * На самом деле я просто пытаюсь отнести 'CategoryCode' в Книге к 'CategoryCode' в Category и могу обновить это так, как должно быть?

1 Ответ

0 голосов
/ 28 мая 2019

Как уже объяснил @PanagiotisKanavos в комментарии, я просто публикую решение:

CategoryCode - это не PrimaryKey из Category класса модели.Таким образом, вы не можете сделать CategoryCode как ForeignKey в Book классе модели.Вместо этого вы должны использовать CategoryId как ForeignKey в Book классе модели следующим образом:

public class Book 
{
  public Guid BookId { get;set; }
  public string BookName { get;set; }

  [ForeignKey("Category")]
  public Guid CategoryId { get;set; } // <-- Here CategoryId instead of CategoryCode
  public Category Category { get;set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...