Каким образом каскадные удаления идут в отношениях от одного -до -многих?

Использование кода Entity Framework -первый подход.

Предположим, у меня есть два класса сущностей.:

[Table("Objects")]
public class DbObject : IValidatableObject
{
    public long Id { get; set; }

    public string Name { get; set; }
    public string Description { get; set; }

    public virtual ICollection<DbObjectProperty> Properties { get; set; }
}

[Table("ObjectProperties")]
public class DbObjectProperty
{
    public long Id { get; set; }

    public string Name { get; set; }
    public string Value { get; set; }

    [Display(Name = "Object"), UIHint("Object")]
    public long ObjectId { get; set; }
    public virtual DbObject Object { get; set; }
}

Здесь следует отметить:

  • DbObjectтолько свойство навигации, но ни один столбец с внешним ключом
  • DbObjectPropertyне имеет свойства навигации и соответствующий столбец с внешний ключ
  • Должно быть очевидно, что если я удаляю объект, я хочу, чтобы его свойства сохранялись вместе с ним, но если я удаляю одно свойство, я не хочу, чтобы весь объект исчезал.

В методе OnModelCreatingдля контекста БД до сих пор я определял отношение следующим образом.:

modelBuilder.Entity<DbObjectProperty>()
   .HasRequired(op => op.Object)
   .WithMany(obj => obj.Properties)
   .HasForeignKey(op => op.ObjectId)
   .WillCascadeOnDelete(false);

Конечно, это означает, что каскадных удалений не будет. Мой вопрос: :если я изменю это на true, сделает ли это то, что я хочу?Помните, что если я удаляю объект, я хочу, чтобы его свойства сохранялись вместе с ним, но если я удаляю одно свойство, я не хочу, чтобы весь объект исчез.

Автоматически -сгенерированный код миграции для этого изменения (с falseнаtrue)таков:

DropForeignKey("ObjectProperties", "ObjectId", "Objects");
DropIndex("ObjectProperties", new[] { "ObjectId" });
AddForeignKey("ObjectProperties", "ObjectId", "Objects", "Id", cascadeDelete: true);
CreateIndex("ObjectProperties", "ObjectId");

Меня беспокоит, что это подразумевает, что удаление свойства приведет к удалению связанного с ним объекта. Будет ли он?

13
задан Timwi 12 April 2012 в 11:32
поделиться