2016-08-07 6 views
0

問題文を削除します。次のように

私は多くの1つで設定したモデルを持っている:通話機能エンティティを削除 - ファイル

public class ArticleHeading 
{ 
    [Key] 
    public int ArticleHeadingID 

    public string ArticleHeadingName {get;set;} 

    public virtual ICollection<Article> Articles {get;set;} 

} 

public class Article 
{ 
    [Key] 
    public int ArticleID {get;set;} 

    [Required] 
    public string ArticleContent {get;set;} 

    [Required] 
    [ForeignKey("ArticleHeadingID")] 
    public virtual ArticleHeading Heading {get;set;} 

    [Required] 
    public int ArticleHeadingID {get;set;} 

    [Required] 
    public string ArticleImagePath {get;set;} 
} 

注:一部のデータメンバーを関連性がないため省略されています。

ArticleImagePath

したがって、次のコード:

_context.ArticleHeadings.Remove(someArticleHeading); 

は、すべての記事を削除します私は何を達成したいことは、私は

ArticleHeading
を削除すると、私もこのパスで画像を削除したいということです

それに成功しましたが、記事内のパスにある画像を削除する必要があります。

手作業で簡単に繰り返し処理することができましたが、削除メソッドをオーバーライドまたは拡張して複数回実行する必要がないかどうかを知りたいと思います。

答えて

1

通常、階層化されたアーキテクチャを作成し、サービスまたはリポジトリレイヤでこれらの問題を処理したいと考えています。これらのレイヤーを作成せずにこれを行う最善の方法は、ContextクラスのSaveChangesメソッドをオーバーライドすることです。次のようなものは、あなたが正しい方向に進むようにするはずです。

public override int SaveChanges() 
{ 
    var deletedArticleHeadings = ChangeTracker.Entries<ArticleHeading>().Where(x => x.State == EntityState.Deleted).ToList(); 

    foreach (var headingEntry in deletedArticleHeadings) 
    { 
     var heading = headingEntry.Entity; 

     // Delete things. 
    } 

    return base.SaveChanges(); 
} 
+0

多分私は引数としてarticleheadingをとり、関連する削除を行う静的メソッドを作成しますか?明らかに、EFは外部キーを処理します。削除する必要のあるファイルだけ。ちなみに、これは便利なコードでは良い答えです。 Upvoted。私はいくつかのヒントを得ることができるかどうかを確認するための答えを保持! – Terrance00

+0

通常、複数のレイヤーを持つようにアプリケーションを設定します。したがって、「フロントエンド」またはビュー層、コントローラ層、サービス層、およびデータ層。 EFコンテキストは通常​​、データレイヤーとして機能します。だから、私のコントローラは、サービス層のメソッドを「何か」と呼んでいます。したがって、記事の見出しを削除することは、サービスレイヤーの1つのクラスで1つのメソッドを通じて行われます。このメソッドは、ヘッダーのすべての記事を取得し、削除し、実際の記事のヘッダーと記事をデータレイヤーで削除します。また、削除時に必要なその他のものを削除します。 –

+0

私は参照してください。だから私はこれらの種類のものに余分な層が必要です。皆さん、助けてくれてありがとう。 – Terrance00