2013-04-14 201 views
1

刪除電影我似乎有從我的數據庫中刪除一個電影的問題。我使用FilmId來定位電影,但是,當我嘗試刪除時,系統提示出現以下錯誤消息。無法從實體框架

DELETE語句衝突與基準約束「FK_dbo.Genres_dbo.Films_Film_FilmId」

我假設這是因爲我的風格表格必須Film表的關係,通過FilmId。

這裏是我的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

,你需要有級聯在數據庫中刪除我guees。

0

你有一個表中的電影和流派,定義他們之間的關係坐?您可能需要使用您正在刪除的FilmID查詢該表中的所有記錄,並將這些記錄與實際的電影記錄一起刪除。

看起來像實體框架代碼首先,你需要覆蓋在你的DbContext方法OnModelCreating。然後,您需要調用WillCascadeOnDelete方法並將其傳遞爲true。

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

你可能會發現你需要做一個遷移來添加這個。

或者,你可以只調用film.FilmGenres.Clear()從集合中刪除的流派,但一段時間後,將讓單調乏味。

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

嗨大衛,我是mvc和數據庫的新手。我將如何檢查電影和流派桌之間是否有桌子?據我所知,他們是直接通過FilmId – gb1986

+0

連接「據我所知,他們是直接通過FilmId連接」 - 但有沒有FilmId在類型表呢?你已經發布的課程中沒有。和邏輯膠片到類別爲許多一對多的關係,您通常代表與公正電影ID和類型ID列連接表。 「我將如何檢查」 - 您可以使用SQL Server Management Studio連接到數據庫嗎?我認爲VS中也有一個內置的數據庫瀏覽器。 – Rup