EF6을 사용 중이고 remove를 호출하기 전에 작성된 컨텍스트 요청에서 하위 항목을 포함하지 않고 상위 항목을 삭제하려고합니다. 이 질문에 몇 번 질문을했고 다양한 버전의 응답을 구현하려했지만 컨텍스트 요청에 자식을 포함시키지 않고 부모를 삭제할 때 외래 키 제약 조건 문제가 계속 발생합니다.일대 다 관계의 부모 삭제 관련 문제
부모 :
public class Weapon
{
public Weapon()
{
Dices = new List<Dice>();
}
public Guid Id {get;set;}
public List<Dice> Dices { get; set; }
}
아이 : 다음 주사위를 포함하지 않고 맥락에서 무기를 얻을 경우
public class Dice
{
public Guid Id { get; set; }
public int Sides { get; set; }
public Guid WeaponId { get; set; }
public Weapon Weapon { get; set; }
}
주사위 매핑
// Relationships
this.HasRequired(_ => _.Weapon)
.WithMany(_ => _.Dices)
.HasForeignKey(_ => _.WeaponId)
.WillCascadeOnDelete(true);
삭제로 인해 실패합니다 외래 키 제약 조건. 그러나 주사위를 포함 시키면 무기에 대한 삭제는 장애와 함께 작동합니다. IE
작품 :
public async Task<IHttpActionResult> DeleteWeapon(Guid id)
{
Weapon weapon = await _dbContext.Weapons.Include(w=>w.Dices).SingleOrDefaultAsync(w => w.Id == id);
_dbContext.Weapons.Remove(weapon);
await _dbContext.SaveChangesAsync();
return Ok();
}
실패 : 그 이었지만
public async Task<IHttpActionResult> DeleteWeapon(Guid id)
{
Weapon weapon = await _dbContext.Weapons.SingleOrDefaultAsync(w => w.Id == id);
_dbContext.Weapons.Remove(weapon);
await _dbContext.SaveChangesAsync();
return Ok();
}
내가 정말 그냥 부모를 삭제하는 객체의 자식을 모두 포함 할 필요가 없습니다 선호, 그리고 것 WillCascadeOnDelete 플래그는 무엇을위한 것입니다.
EF 모델에서만 * 데이터베이스 *에 계단식 삭제가 없기 때문입니다. –
어쨌든 코드를 통해 데이터베이스에 캐스케이드를 추가 하시겠습니까? (즉, SQL 스크립트는 실행되지 않습니다.) – Siegeon
데이터베이스를 어떻게 만들었습니까? 코드 첫 번째는 계단식 삭제 외래 키 제약 조건을 생성해야합니다. –