2016-12-13 4 views
0

何らかの理由で、エンティティフレームワークでカスケード削除を使用できません。 "HighScoreListEntry"のいずれかを削除すると自動的に "Players"の行を削除しようとしていますが、SQLコードが正常に見えても、HighScoreListEntryテーブルの行だけが削除されます。エンティティフレームワークのカスケード削除が機能しない

public class Player 
{ 
    //Navigation Property 
    public List<HighScoreListEntry> HSLEs { get; set; } 

    //Properties 
    public int PlayerId { get; set; } 
    public String FName { get; set; } 
    public String LName { get; set; } 

    public Player(String fName, String lName) 
    { 
     FName = fName; 
     LName = lName; 
    } 

    public Player() 
    { 

    } 
} 

public class HighScoreListEntry 
{ 
    //Navigation Property 
    [Required] 
    public Player Player { get; set; } 

    //Foreign key 
    public int PlayerID { get; set; } 

    //Properties 
    [Key] 
    public int HSLEId { get; set; } 
    public TimeSpan Duration { get; set; } 
    public DateTime Time { get; set; } 
    public int Value { get; set; } 

    public HighScoreListEntry(Player player, TimeSpan duration, DateTime time, int value) 
    { 
     if (value < 0) throw new FormatException(); 
     Player = player; 
     Duration = duration; 
     Time = time; 
     Value = value; 
    } 

    public HighScoreListEntry() 
    { 

    } 
} 

HighScoreListEntry DDLコード

CREATE TABLE [dbo].[HighScoreListEntries] (
    [HSLEId] INT  IDENTITY (1, 1) NOT NULL, 
    [PlayerID] INT  NOT NULL, 
    [Duration] TIME (7) NOT NULL, 
    [Time]  DATETIME NOT NULL, 
    [Value] INT  NOT NULL, 
    CONSTRAINT [PK_dbo.HighScoreListEntries] PRIMARY KEY CLUSTERED ([HSLEId] ASC), 
    CONSTRAINT [FK_dbo.HighScoreListEntries_dbo.Players_PlayerID] FOREIGN KEY ([PlayerID]) REFERENCES [dbo].[Players] ([PlayerId]) ON DELETE CASCADE 
); 


GO 
CREATE NONCLUSTERED INDEX [IX_PlayerID] 
    ON [dbo].[HighScoreListEntries]([PlayerID] ASC); 

私は、メソッド名が最善ではありません知っているが、それはそれはあなたが期待されるように動作してはならない問題

public bool edit(HighScoreListEntry entryOld, HighScoreListEntry entryNew) 
    { 
     try 
     { 
      db.HSLE.Remove(entryOld); 
      db.HSLE.Add(entryNew); 
      db.SaveChanges(); 
     } catch (Exception f) 
     { 
      Console.WriteLine(f.ToString()); 
      return false; 
     } 
     return true; 
    } 

答えて

0

ではありません。

HighScoreListEntryを削除すると、親であるため、Playerエンティティは削除されません。削除した場合は、Playerが削除されたプレイヤーに属するすべてのHighScoreListEntryエンティティも削除されます。

関連する参考文献を参照してください。How do I use cascade delete with SQL Server?

関連する問題