Правило каскадного удаления в коде EF 4.1 сначала при использовании Ассоциации общего первичного ключа
Я реализовал двунаправленное отношение 1: 1, основанное на этом ответе:
Первичный / внешний ключ в Entity Framework
Я определяю двунаправленное отношение следующим образом:
public class Student
{
public virtual int StudentId { get; set; }
public virtual Anamnesis Anamnesis { get; set; }
. . .
}
public class Anamnesis
{
[Key, ForeignKey("Student")]
public int AnamnesisId { get; set; }
public virtual Student Student { get; set; }
. . .
}
Где, студент является основной сущностью и анамнез это сущность, которая разделяет PK.
Теперь я хотел бы, чтобы созданная связь имела правило Delete = CASCADE. На самом деле, создаваемое отношение имеет правило Delete = NO ACTION, как показано ниже Изображение:

Если я вручную удаляю это отношение в окне свойств таблицы и добавляю другое отношение с правилом Delete = CASCADE, код работает так, как я ожидаю, позволяя мне удалить студента и его общий анамнез, который имеет тот же идентификатор.
Итак, вот мой вопрос:
Есть ли способ использовать аннотацию данных (не Fluent API) в моем классе, чтобы я получил отношение с правилом CASCADE delete? Я бы предпочел использовать аннотацию данных, но если это невозможно, я бы будьте счастливы с некоторым свободным кодом API, который делает эту работу.
Примечание
Я попробовал Fluent API-код, который показан в этом посте . Это не работает в моем случае, когда у меня есть двунаправленные свойства.
2 ответов:
Следующий fluent API-код прекрасно переключается на каскадное удаление в базе данных:
public class Student { public virtual int StudentId { get; set; } public virtual Anamnesis Anamnesis { get; set; } } public class Anamnesis { public int AnamnesisId { get; set; } public virtual Student Student { get; set; } } public class Context : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Anamnesis> Anamnesises { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Student>() .HasRequired(s => s.Anamnesis) .WithRequiredPrincipal(a => a.Student) .WillCascadeOnDelete(); } }
Кроме того, вы можете использовать атрибут [Required], и он автоматически установит правило удаления в режим "каскад" в связанном отношении. (а также установить свойство "Allow Null" этой сущности в значение" false " в БД)

Comments