определить отношение иностранного ключа в модели EF mvc3 - PullRequest
2 голосов
/ 25 января 2012

я определяю отношение внешнего ключа на уровне модели примерно так:

public class CMShoppingEntities : DbContext
{
  public DbSet<Category> Categories { get; set; }
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
            modelBuilder.Entity<Category>()
                .HasOptional(c => c.parentCategory)
                .WithMany(c => c.ChildCategories)
                .HasForeignKey(p => p.ParentID);

            base.OnModelCreating(modelBuilder);
  }
}

так зачем нам нужно или нужно определять отношение внешнего ключа на уровне базы данных / таблицы ..?

1 Ответ

0 голосов
/ 25 января 2012

Это отображение говорит о том, что в базе данных существует отношение FK = EF считает, что ваша база данных использует ссылочную целостность. Если ваша база данных не использует его, отображение и ваше приложение будут работать до тех пор, пока кто-нибудь не сохранит данные в вашей базе данных, что нарушит это ожидаемое ограничение. Тогда ваше приложение случайно перестанет работать из-за противоречивых данных.

Так что, если вы хотите, чтобы отношения FK в вашей модели использовались и в базе данных.

Эта проблема имеет несколько проблем:

  • Если вы ожидаете, что каскадное удаление сработает. Вы должны использовать референтное ограничение в базе данных и настроить его также для каскадного удаления
  • Не указание отношений в базе данных работает легко только при использовании сопоставления кода. В случае EDMX вы должны вручную поддерживать описание SSDL, чтобы EF все еще полагал, что связь существует
...