2017-10-03 11 views
1

私は、以下の構造を持つ3つのテーブルがあります。私は次のマッピング作成したTodo.ResponsibleUsersについてはNHibernateの1対多の削除の関連レコード

Todo 
    Id 
    Name 

User 
    Id 
    Name 

TodoUser 
    Id 
    TodoId 
    UserId 
    Status 

private IList<TodoUser> responsibleUsers = new List<TodoUser>(); 
[Bag(0, Name = "ResponsibleUsers", Cascade = CascadeStyle.AllDeleteOrphan, Table = "TodoUser", Inverse = true)] 
[Key(1, Column = "TodoId")] 
[OntToMany(2, ClassType = typeof(TodoUser))] 
public virtual IList<TodoUser> ResponsibleUsers { 
    get { return responsibleUser; } 
    set { responsibleUsers = (IList<TodoUser>)value; } 
} 

はしていResponsibleUsersプロパティをいタイプIList<TodoUser>であるか、タイプList<TodoUser>でもかまいませんか? 私が質問に答えるためにIList<TodoUser>

答えて

1

では不可能であるtodo.ResponsibleUsers.RemoveAll(itemsToRemove);ような何かをしたいと思います:

プロパティResponsibleUsersがタイプIList<TodoUser>であることが持っているか、それはまたタイプList<TodoUser>にすることができますか?

Chapter 6. Collection Mapping

6.1:

は、ドキュメントを確認してください。

public class Product 
{ 
    private string serialNumber; 
    private ISet<Part> parts = new HashSet<Part>(); 

    public ISet<Part> Parts 
    { 
     get { return parts; } 
     set { parts = value; } 
    } 

    public string SerialNumber 
    { 
     get { return serialNumber; } 
     set { serialNumber = value; } 
    } 
} 

実際のインタフェースは System.Collections.Generic.ICollection<T>System.Collections.Generic.IList<T>System.Collections.Generic.IDictionary<K, V>、 次のようになります。永続的なコレクション

NHibernateのは、永続的なコレクション値フィールドは、例えば、汎用のインターフェイスタイプとして を宣言されている必要がありますSystem.Collections.Generic.ISet<T>

だから、はい、我々はインターフェイスを使用する必要があります。私は​​ような何かをしたいと思います

の問題を解決するために

我々は

public static class Ext 
{ 
    public static void RemoveAll(this IList<T> list, IEnumerable<T> toRemove) 
    { 
     ... // remove items matching toRemove from the list 
    } 
としていくつかのカスタム拡張メソッドを実装することができ
関連する問題