0
使用S#arp架构1.0RC ...如何从fluent-nhibernate在我的asp.net-mvc控制器中访问受保护的setter属性?
我有一个控制器,似乎永远不会更新我的一个属性。
我的课是具有Manager属性的用户抽象类。经理是用户的子类,就像员工一样。
我声明管理器的属性设置为受保护,并提供了一个AddManager的方法。这样,我也可以控制经理从该实体中的集合中获得的用户。
我的问题是,ModelBinder没有在回发中找到更新项目的Manager属性。如果我删除保护,它工作正常。添加保护背:对我来说没有汤。
以下哪些部分允许我保持setter的保护状态,并仍然在回发中获取控制器中的值?
谢谢...
这里是强制性的映射(一些编辑出非详情):
<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);
}
}
谢谢,瑞安。我现在将给AutoMapper一个看看,并报告它是如何工作的...赞赏! – 2009-09-02 23:10:00
+1:始终使用视图模型。 – 2009-09-03 13:11:00
这是我的答案。我已经看到AutoMapper会让我受益。 一个注意:我应该澄清,我*是*在我的控制器中使用ViewModel类并传递给我的页面 - 这是我知道发送SelectList项目存在于我的实体之外的最佳方式。 – 2009-09-09 13:29:43