私の謝罪をロック...ツリー構造、ユニークな名前/親、Entity Frameworkの取引や、これは前に頼まれている場合
私はこのようないくつかのEFモデルクラスがあります。
public class Folder
{
[Key]
[Column("folder_id")]
public int FolderId { get; set; }
[Required]
[Column("organization_id")]
public int OrganizationId { get; set; }
public virtual Organization Organization { get; set; }
[Column("name")]
[MaxLength(MAX_NAME_LENGTH)]
public string Name { get; set; }
[Column("parent_folder_id")]
public int? ParentFolderId { get; set; }
[ForeignKey("ParentFolderId")]
public virtual Folder ParentFolder { get; set; }
public virtual ICollection<File> Files { get; set; }
public virtual ICollection<Folder> Folders { get; set; }
}
public class File
{
[Key]
[Column("file_id")]
public int FileId { get; set; }
[Column("name")]
[Required]
public string Name { get; set; }
[Column("folder_id")]
[Required]
public int FolderId { get; set; }
public virtual Folder Folder { get; set; }
}
を私が働いていますこれらの2つのテーブルに対していくつかの操作を行います。私は読書をし、いくつかの小切手をしてから、書き返したいと思います。私の懸念は並行性です。例えば:フォルダ内の
ファイルを作成するための要求「サミュエル」「ジャミソンは」を参照してくださいする
- チェックを受けている「ジャミソン」 に「サミュエル」という名前のファイルまたはフォルダなしはありません
- 作成ファイルフォルダ内の「サミュエル」「ジャミソン」
フォルダ「ジャミソン」のフォルダ「サミュエル」を作成するための要求を受信する
- チェック
チェック アプリで行われている「ジャミソン」に「サミュエル」という名前のファイルまたはフォルダ
私の最初の考えはトランザクションでしたが、分離レベルを変更したり、悲観的なロックを行う必要があると感じました。それとも別のアプローチですか?あなたはEntity Frameworkでこの問題にどのようにアプローチしますか?
ありがとうございます。しかし、私は更新された行を上書きしないことを保証していると感じています。ここで問題となるのは、異なる行が互いに完全性を維持していることを保証する必要があるということです。言い換えれば、同じParentFolderIdを持つ他の行が同じ名前を持つ行を更新しないようにする必要があります。編集:あなたの答えが私の問題を解決するためにどのように使用できるのか理解できないでしょうか? –
これ以上考えてみると、たくさんの操作を列挙できると思います。私は私の小切手をする、私はParentFolderの日付を更新し、保存します。私の前提は、並行処理の例外がある場合です。編集のNONEは通過します。次に、親の中の何かを変更するすべての操作の日付を更新するだけです。このようにして、例外がスローされることなく、同じ親に対して2つの操作が行われないようにします。これは正しいのですか? –
アドオンに関する質問、タイムスタンプフィールドのみを更新する予定はありますか?私はDateTimeOffsetの代わりにあなたが示したそのリンクに指定されているように、byte []配列を使用しています。私は親行について何も変更していないので、私はそれを同期構造のように使っています。 –