S#arp アーキテクチャ 1.0RC を使用して...
プロパティの 1 つを更新しないように見えるコントローラーがあります。
私のクラスは Manager プロパティを持つ User 抽象クラスです。Manager は、Employee と同様に User のサブクラスです。
Manager のプロパティ セッターを protected として宣言し、AddManager にメソッドを提供しました。そうすれば、マネージャーがそのエンティティのコレクションから持っているユーザーを制御することもできます。
私の問題は、ModelBinder がポストバックで更新されたアイテムの Manager プロパティを見つけられないことです。保護を削除すると、正常に動作します。保護されたバックを追加します。私にはスープはありません。
セッターを保護したまま、ポストバック時にコントローラーで値を取得できるのは、次のどの部分ですか?
ありがとう...
必須のマッピングは次のとおりです(特定のもの以外を一部編集しています)。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="">
<class name="Core.User, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Users" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Int32" unsaved-value="0" column="UserId">
<generator class="identity" />
</id>
<le snip..>
<many-to-one access="field.camelcase-underscore" cascade="save-update" name="Manager" column="ManagerId" />
<joined-subclass name="Core.Employee, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<key column="EmployeeId" />
</joined-subclass>
<joined-subclass name="Core.Approver, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<key column="ManagerId" />
<bag name="Users" lazy="true" cascade="save-update" inverse="true">
<key column="ManagerId" />
<one-to-many class="Core.User, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</joined-subclass>
私のポリモーフィッククラスは
public abstract class User : Entity
{
public virtual string Name { get; set; }
private Manager _manager;
public virtual Manager Manager
{
get { return _manager; }
protected set { _manager = value; }
}
public virtual void SetManager(Manager manager)
{
if (_manager != null)
{
_manager.RemoveUser(this);
}
_manager = manager;
}
}
public class Manager : User
{
public Manager()
{
_users = new List<User>();
}
private IList<User> _users;
public virtual IList<User> Users
{
get { return _users; }
protected set { _users = value; }
}
public virtual void AddUser(User user)
{
if (_users.Contains(user)) return;
Users.Add(user);
user.SetManager(this);
}
public virtual void RemoveUser(User user)
{
if (!_users.Contains(user)) return;
Users.Remove(user);
user.SetManager(null);
}
}