我有一个实体类Customer作为属性Address,它是Address类的一个对象,并且具有很少的属性。它看起来如下:
public partial class Customer
{
public virtual int ID { get; set; }
public virtual string Symbol { get; set; }
public virtual string Name { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string NIP { get; set; }
public virtual Address Address { get; set; }
}
public partial class Address
{
public virtual int ID { get; set; }
public virtual string Descriptive { get; set; }
public virtual string Street { get; set; }
public virtual string City { get; set; }
public virtual string PostCode { get; set; }
public virtual string Country { get; set; }
}
在数据库或实体中,它们之间没有任何关系。 Address只是Customer类中包含的对象,它们由NHibernate框架生成。实际上< component /> map元素正在用于:
<class name="Customer" table="`CRM_CUSTOMER`">
<id name="ID">
<generator class="native" />
</id>
<property name="Symbol" unique="true" />
<property name="Name" />
<property name="FirstName" />
<property name="LastName" />
<property name="NIP" />
<component name="Address" class="Address">
<property name="Descriptive" />
<property name="Street" />
<property name="City" />
<property name="PostCode" />
<property name="Country" />
</component>
</class>
但是,客户端生成的代码根本看不到Address类/属性。什么都没有帮助。已阅读大量文章,没有。所以如果有人能提供帮助,那真的很感激:)
我正在使用VS 2010 Proffesional。
TIA
罗兰
答案 0 :(得分:0)
使用[Include]属性尝试并装饰Customer类的地址属性。这应该提示RIA返回Address属性。
如果这不起作用,我会看看服务器端域服务方法是否正确填充了地址属性,以及问题是将数据传递给Silverlight客户端。
然后,您可以尝试将Address视为RIA域实体,并在客户和地址之间建立关系。然后,包含方法应该产生结果。
希望这有帮助。
答案 1 :(得分:0)
[抱歉延迟...我回到这里]
不幸的是,[Include]属性无济于事。需要添加[association]伴随属性。但这意味着我想要避免的事情 - 对域对象强制执行其他字段和实现,这些域对象本来是简单的,没有这种不必要的东西,而且是用于ORM映射(NHibernate)。
该解决方案非常具有侵入性,并引入了与实体相关联的所有内容 - ID。这也对映射有影响,因为我需要放置&lt; parent /&gt; &lt; component /&gt;内的元素。只是为了从父母那里得到一个ID - 对于如何获得它没有更好的想法...
最后,域类变为如下:
[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{
[DataContract]
internal class CustomerMetadata
{
[Key]
[DataMember]
public int ID { get; set; }
[DataMember]
public string Symbol { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string NIP { get; set; }
[Include]
[Association("Customer_Address", "ID", "CustomerID", IsForeignKey = true)]
[DataMember]
public Address Address { get; set; }
}
}
...和
public partial class Customer
{
public virtual int ID { get; set; }
public virtual string Symbol { get; set; }
public virtual string Name { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string NIP { get; set; }
public virtual Address Address { get; set; }
}
要使其正常工作,映射已更改为以下内容:
<class name="Customer" table="`CRM_CUSTOMER`">
<id name="ID">
<generator class="native" />
</id>
<property name="Symbol" unique="true" />
<property name="Name" />
<property name="FirstName" />
<property name="LastName" />
<property name="NIP" />
<component name="Address" class="Address">
<parent name="Customer" />
<property name="Descriptive" />
<property name="Street" />
<property name="City" />
<property name="PostCode" />
<property name="Country" />
</component>
</class>
&lt; parent /&gt;元素是新的。我不仅确定使关联成为外键关联的可选属性是否正确...
我也很惊讶我不会为地址本身提供任何域名服务,因为生成的代码包含它以及我希望在故事开头时使用RIA服务发生的所有其他事情。
解决方案变得非常具有侵略性,因此对我来说并不完美,但至少目前至少令人满意。现在它有效。我只是想知道我将与NH中的多对多关联做什么?
希望这有助于某人。欢呼声。
罗兰