3

例如,我有一个实体。具有以下属性:

public class Entity
{
   public int CustomerId { get; set; }
   public Customer { get; set; } 
}

如何将 CustomerId 映射两次。一次用于 int 属性,一次用于多对一关系?

<many-to-one name="Customer" column="[CustomerId]" class="Customer"/>
<property name="CustomerId" column="[CustomerId]" type="Int64" />

就这个,行不通。我已经尝试过,使它们只读但没有成功。

4

2 回答 2

8

其中之一应映射为只读(inser/udpate false),并引用为formula

<many-to-one name="Customer" column="[CustomerId]" class="Customer"/>
<property name="CustomerId" formula="[CustomerId]" type="Int64" insert="false" update="false" />

然后它应该可以正常工作。然后这两个属性都可以用于 Select, Where... order by

于 2012-12-21T11:34:50.097 回答
1

不需要映射CustomerId,可以通过Customer.CustomerId来访问。如果您使用延迟加载,则 CustomerId 将填充到代理对象中,因此它始终可用,而不会触发额外的选择。

如果您绝对必须公开它,请将其公开为可为空的只读属性:

   public Customer { get; set; } 
   public int? CustomerId
   {
       get { return Customer == null ? (int?)null: Customer.CustomerId }
   }
于 2012-12-21T22:02:44.313 回答