두 개체가 있습니다. 프로필 및 ProfileImage. 내 상황이 프로필을 가져 오기 위해 설정하고 내가 먼저 프로필을 가져 오는 profileImage을 받고 이런 식으로 제거, 프로필을 통해 ProfileImage (단지 참조를) 삭제할된다EF 및 ASP.Net MVC로 중첩 엔티티 개체를 삭제할 수없는 이유는 무엇입니까?
using (var dbContext = new myContext())
{
var profile = dbContext.profiles.Where(i => i.ApplicationUserGuid == userId).First();
var profileImageToDelete = profile.profileImages.Where(i => i.YogaProfileImageId == Convert.ToInt32(idToRemove)).First();
profile.ProfileImages.Remove(profileImageToDelete);
dbContext.SaveChanges();
}
하지만 ' 저장시 오류가 발생합니다.
내 두 엔티티 객체 :작업이 실패했습니다. 하나 이상의 외래 키 속성이 nullable이 아니기 때문에 관계를 변경할 수 없습니다. 관계가 변경되면 관련 외래 키 등록 정보는 널 (NULL) 값으로 설정됩니다. 외부 키가 널값을 지원하지 않으면, 새 관계가 정의되어야하고, 외부 키 등록 정보에 널이 아닌 다른 값이 지정되어야합니다. 그렇지 않으면 관련이없는 오브젝트가 h 제되어야합니다. 여기
public class Profile
{
public Profile()
{
ProfileImages = new List<ProfileImage>();
}
[Key]
public int ProfileId { get; set; }
[Column(TypeName = "VARCHAR")]
[StringLength(36)]
[Index]
public string ApplicationUserGuid { get; set; }
public bool IsActive { get; set; }
public virtual ICollection<ProfileImage> ProfileImages { get; set; } //one-to-many }
public class ProfileImage
{
[Key]
public int ProfileImageId { get; set; }
public int ProfileRefId { get; set; }
[ForeignKey("ProfileRefId")]
public virtual Profile Profile { get; set; }
public byte[] CroppedImage { get; set; }
public byte[] ImageThumbnailCropped { get; set; }
public bool IsMainImage { get; set; }
}
나는 모두 삭제에 대해 뭔가를 읽을 수는 있지만이 나는 완전히 삭제하려면 이미지를 얻기 위해해야 할 일을 할 필요가 또는 무엇 있는지 확실하지 않습니다 ProfileImage 테이블에서. 에 다시 저장되지 않습니다
dbContext.Entry(profileImageToDelete).State = EntityState.Deleted;
당신의 profileImage에 수정 아무것도 표시되지 않습니다 dbContext.SaveChanges();
항목을 삭제해도 다른 항목이이를 참조해야하거나 계단식 규칙을 적절하게 설정해야합니다. – Phil1970
그게 무슨 뜻이고, 무엇을 바꾸어야합니까? – user1186050
글쎄, 데이터베이스 디자인을 적절하게 수정하거나 항목을 삭제할 수없는 이유를 알아낼 필요가 있습니다. 그 이유와 해결책은 각 응용 프로그램마다 다릅니다. 때로는 해당 개체를 가리키는 모든 개체를 삭제할 수 있습니다. 언젠가 null 링크를 설정하려고합니다. 언젠가, 당신은 그것을 막고 싶습니다. 그리고 언젠가 어떤 루프 나 복잡한 로직이 있다면 코드에서 수동으로해야 할 수도 있습니다. ** 캐스케이드 삭제 또는 자신의 코드를 사용하여 프로필에서 이미지를 제거해야합니다. 그렇지 않으면 프로필에 기존 이미지가 없습니다. ** – Phil1970