我该如何映射:
public class Customer
{
private IList<Order> _orders;
public IEnumerable<Order>
GetAllOrders()
{
return _orders;
}
}
Run Code Online (Sandbox Code Playgroud)
在项目页面上有一些样本,但没有关于这种情况.有这个样本:
// model
public class Account
{
private IList<Customer> customers = new List<Customer>();
public IList<Customer> Customers
{
get { return customers; }
}
}
// mapping
HasMany(x => x.Customers)
.Access.AsCamelCaseField();
Run Code Online (Sandbox Code Playgroud)
但它假设Account有公共领域的客户,那个场景与我的不同.我尝试了一些可能的选项但没有效果:
HasMany(x => Reveal.Propertie("_orders"))
Run Code Online (Sandbox Code Playgroud)
私有字段在简单属性映射中工作正常但集合映射完全不同.任何的想法?谢谢
Jam*_*Ide 24
最简单的解决方案是将您的集合公开为公共属性Orders而不是GetAllOrders()方法.然后你的映射是
HasMany(x => x.Orders)
.Access.AsCamelCaseField(Prefix.Underscore);
Run Code Online (Sandbox Code Playgroud)
而你的班级是
public class Customer
{
private IList<Order> _orders = new List<Order>();
public IEnumerable<Order> Orders
{
get { return _orders; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果这对您不起作用,则可以使用Fluent NHibernate的Reveal映射来映射私有属性.
编辑补充:刚做完这个,正确的答案是:
HasMany<Order>(Reveal.Property<Customer>("_orders")) etc.
Run Code Online (Sandbox Code Playgroud)
必须将集合公开为受保护的虚拟属性才能允许代理:
protected virtual IList<Order> _orders { get; set; }
Run Code Online (Sandbox Code Playgroud)
这个答案让我走上正轨.
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |