0

应用程序组件:NHibernate 3.3 FluentNHibernate 1.3 我目前只使用 Automapping(也许这就是问题所在)。

我是 NHibernate 的新手,所以这可能是一个简单的问题。

这是基本结构(不是实际的类)。

class Family
{
   public virtual Guid ID { get; set; }
   public virtual IList<Person> Members { get; set; }
}
class Person
{
   public virtual Guid ID { get; set; }
   public virtual Family Family { get; set; }
   public virtual string Name { get; set; }
}

我有一个人的“编辑”视图,它将 ID 作为参数。Action 然后按 ID 加载 Person 对象并呈现视图。

问题是当我更改某些内容并将其发回时,Person对象的Family成员为空,因此当它保存时,Person 不再有家庭:(

我尝试添加一个“FamilyID”属性,然后将其作为视图中的隐藏属性,但是 NHibernate 持续存在它存在问题(如果这是应该工作的方式,我可以发布错误)。

我可以在发回 Person 对象时加载它,然后复制一些信息,但这对我来说似乎是错误的......

任何帮助将不胜感激。

4

1 回答 1

2

我可以在发回 Person 对象时加载它,然后复制一些信息,但这对我来说似乎是错误的......

如果您的视图中的 Family 属性没有相应的输入字段,则这些值将永远不会发送回您的控制器。因此,在更新您的 Person 对象之前,您应该使用数据库中的 FamilyID(您将使用隐藏字段发送)检索它们。这才是正确的流程。


更新:

据说处理这种情况的最佳方法是使用视图模型(DUH)。因此,您将设计一个视图模型,该模型仅包含用户在视图中应该编辑的属性。然后,您将使视图强类型化到视图模型,并且您的 HttpPost 控制器操作将视图模型作为参数。在此操作中,您将加载需要从数据库更新的整个 Person 域,设置从视图模型修改的属性(使用诸如 之类的工具非常容易AutoMapper),然后将您的域模型持久化回数据库。只有作为视图一部分的属性才会从此 Person 域模型中修改。

于 2013-02-05T21:45:47.610 回答