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
에 더 열은 탐색이 없습니다 속성 및은 외래 키가있는 해당 열- 입니다. 내가 객체를 삭제하면 그 속성도 함께 가지길 원하지만, 하나의 속성을 삭제하면 전체 객체가 사라지지 않을 것임을 분명히해야합니다. 물론
modelBuilder.Entity<DbObjectProperty>() .HasRequired(op => op.Object) .WithMany(obj => obj.Properties) .HasForeignKey(op => op.ObjectId) .WillCascadeOnDelete(false);
이 더 계단식 삭제가 발생하지 않습니다 의미 DB를 컨텍스트에 대한
OnModelCreating
방법에서
은, 지금까지 나는 관계를 정의하려면 다음을했다. 내 질문은 : 내가 이것을 true
으로 바꾸면, 내가 원하는 것을 할 수 있을까? 객체를 삭제하면 객체의 속성을 함께 사용하고 싶지만 단일 속성을 삭제하면 객체 전체가 사라지 길 바라지 않습니다. 나는이 속성을 삭제하면 관련 개체를 삭제할 것을 암시하는 것 같다 걱정
DropForeignKey("ObjectProperties", "ObjectId", "Objects");
DropIndex("ObjectProperties", new[] { "ObjectId" });
AddForeignKey("ObjectProperties", "ObjectId", "Objects", "Id", cascadeDelete: true);
CreateIndex("ObjectProperties", "ObjectId");
:
이 변경 (false
에서 true
에)에 대한 자동 생성 된 마이그레이션 코드는 이것이다. 그럴거야?
[감사합니다!] – Timwi
엄지 손가락 규칙은 캐스케이드 삭제로 레코드를 삭제하면 외래 키가 다른 레코드에서 분리되어 해당 종속 레코드가 삭제됩니다 너무. – orad
그래서 ModelBuilder.Entity() .HasOne (c => c.Parent)와 동일하므로'modelBuilder.Entity () .HasMany (p => p.Children) .WithOne (c => c.Parent)) .WithMany (p => p.Children)'(그들은 같은 관계를 지정합니다)? –