2013-04-14 3 views
1

내 데이터베이스에서 영화를 삭제하는 데 문제가있는 것 같습니다. FilmId를 사용하여 필름을 대상으로하지만, 삭제하려고하면 다음과 같은 오류 메시지가 나타납니다. 엔티티 프레임 워크에서 영화를 삭제할 수 없습니다.

FilmId를 통해 참조 제약 조건 "FK_dbo.Genres_dbo.Films_Film_FilmId"

내 장르 테이블이 영화 테이블에 관계가 있기 때문입니다 있으리라 믿고있어와 충돌 DELETE 문,

.

여기 여기 내 DeleteFilm 방법

public ActionResult DeleteFilm(int id) 
{ 
    Film film = db.Films.Find(id); 
    db.Films.Remove(film); 
    db.SaveChanges(); 
    return RedirectToAction("MyFilms"); 
} 

이 방법 나는 내가이 영화를 삭제하기 위해서는 관계를 삭제 얼마나

@using (Html.BeginForm()) 
{ 
    @Html.ActionLink("Remove Movie", "DeleteFilm", new { id = Model.FilmId }); 
} 

에게 호출 actionlink입니다. 어떤 도움이라도 대단히 감사하겠습니다.

여기

public class Film 
{ 
    [Key] 
    public int FilmId { get; set; } 
    public string FilmTitle { get; set; } 
    public int FilmReleaseYear { get; set; } 
    public string FilmDirector { get; set; } 
    public string FilmRating { get; set; } 
    public string FilmImageUrl { get; set; } 
    public string FilmImdbUrl { get; set; } 
    public virtual ICollection<Genre> FilmGenres { get; set; } 
    public virtual ICollection<FilmCastMember> FilmCastList { get; set; } 
    public virtual ICollection<FilmReview> FilmReviews { get; set; } 

    public Film() 
    { 
     FilmGenres = new List<Genre>(); 
     FilmCastList = new List<FilmCastMember>(); 
     FilmReviews = new List<FilmReview>(); 
    } 
} 

가 여기 내 장르 유형

public class Genre 
{ 
    [Key] 
    public int GenreId { get; set; } 
    public string GenreType { get; set; } 
} 
+0

영화 및 장르 유형을 표시 할 수 있습니까? – devdigital

답변

1

당신이 폭포가 데이터베이스에서 삭제가 필요 I guees 내 영화 클래스입니다.

0

관계를 정의하는 영화와 장르 사이에 앉아있는 테이블이 있습니까? 아마도 삭제하려는 FilmID가있는 모든 레코드에 대해 해당 테이블을 쿼리하고 실제 레코드와 함께 해당 레코드를 제거해야합니다.

Entity Framework 코드의 경우 먼저 DbContext에서 OnModelCreating 메서드를 재정의해야합니다. 그런 다음 WillCascadeOnDelete 메서드를 호출하여 true로 전달해야합니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Film>() 
     .HasOptional(e => e.FilmGenres) 
     .WithMany() 
     .WillCascadeOnDelete(true); 
} 

아마도 마이그레이션을 추가해야 할 수 있습니다.

또는 film.FilmGenres.Clear()를 호출하여 컬렉션에서 Genres를 제거 할 수도 있지만 잠시 후에 지루해집니다.

using (var db = new FilmContext()) 
{ 
    Film film = db.Films.First(each => each.FilmTitle == "Some Title"); 
    film.FilmGenres.Clear(); 
    db.Films.Remove(film); 
    db.SaveChanges(); 
} 
+0

안녕하세요, David 저는 mvc 및 데이터베이스를 처음 사용합니다. 영화 테이블과 장르 테이블 사이에 테이블이 있는지 어떻게 확인하나요? 내가 아는 한 그들은 FilmId를 통해 직접 연결되어 있습니다 – gb1986

+0

"내가 아는 한 그들은 FilmId를 통해 직접 연결됩니다."- 장르 테이블에는 FilmId가 없습니다. 게시 한 수업에 없습니다. 논리적으로 영화 대 장르는 다 대다 관계입니다. 일반적으로 필름 ID 및 장르 ID 열만있는 조인 테이블로 나타납니다. "어떻게 확인하겠습니까?"- SQL Server Management Studio를 사용하여 데이터베이스에 연결할 수 있습니까? VS에 내장 데이터베이스 익스플로러도 있다고 생각합니다. – Rup

관련 문제