C# NHibernate一对多映射和保存 公共类产品:EntityBase,IAggregateRoot { 公共虚拟字符串ProductName{get;set;} 公共虚拟列表描述{get;set;} } 公共类ProductDetail:EntityBase,IAggregateRoot { 公共虚拟字符串描述{get;set;} 公共虚拟产品产品{get;set;} }

C# NHibernate一对多映射和保存 公共类产品:EntityBase,IAggregateRoot { 公共虚拟字符串ProductName{get;set;} 公共虚拟列表描述{get;set;} } 公共类ProductDetail:EntityBase,IAggregateRoot { 公共虚拟字符串描述{get;set;} 公共虚拟产品产品{get;set;} },c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,上述产品实体具有多个ProductDetails。我的映射如下所示 public class Product : EntityBase<Product, int>, IAggregateRoot { public virtual string ProductName { get; set; } public virtual List<ProductDetail> Description { get; set; } } public class Produ

上述产品实体具有多个ProductDetails。我的映射如下所示

public class Product : EntityBase<Product, int>, IAggregateRoot
{
    public virtual string ProductName { get; set; }
    public virtual List<ProductDetail> Description { get; set; }
}

public class ProductDetail : EntityBase<ProductDetail, int>, IAggregateRoot
{
    public virtual string Description { get; set; }
    public virtual Product Product { get; set; }
}
公共类ProductMap:ClassMapping
{
公共产品地图()
{
懒惰(假);
表(“产品”);
Id(x=>x.Id,map=>{map.Column(“Id”);map.Generator(Generators.Native);});
属性(x=>x.ProductName,map=>map.NotNullable(true));
行李(x=>x.描述,m=>{
m、 反转(true);//集合是否反转?
m、 级联(Cascade.All);//设置级联策略
m、 Key(k=>k.Column(col=>col.Name(“ProductID”));//详细信息表中的外键
},a=>a.OneToMany());
}
}
公共类ProductDetailMap:类映射
{
PublicProductDetailMap()
{
懒惰(假);
表(“产品详情”);
Id(x=>x.Id,map=>{map.Column(“Id”);map.Generator(Generators.Native);});
属性(x=>x.Description,map=>map.NotNullable(false));
多酮(x=>x.产品,x=>
{
x、 列(“产品ID”);
});
}
}
当我保存这个;我犯了错误

NHibernate.dll中发生类型为“NHibernate.PropertyAccessException”的异常,但未在用户代码中处理 其他信息:无效强制转换(检查映射是否存在属性类型不匹配)


对于映射集合,我们必须使用接口(
IList

公共类产品:EntityBase,IAggregateRoot
{
公共虚拟字符串ProductName{get;set;}
//公共虚拟列表描述{get;set;}
公共虚拟IList描述{get;set;}
}
NHibernate将注入其自己的
IList
实现
——它不是
列表
的子项。。。这是代理所需要的。。。延迟加载

public class ProductMap : ClassMapping<Product>
{
    public ProductMap()
    {
        Lazy(false);
        Table("Product");

        Id(x => x.ID, map => { map.Column("ID"); map.Generator(Generators.Native); });
        Property(x => x.ProductName, map => map.NotNullable(true));

        Bag(x => x.Description, m => {
            m.Inverse(true); // Is collection inverse?
            m.Cascade(Cascade.All); //set cascade strategy
            m.Key(k => k.Column(col => col.Name("ProductID"))); //foreign key in Detail table
        }, a => a.OneToMany());
    }
}

public class ProductDetailMap : ClassMapping<ProductDetail>
{
    public ProductDetailMap()
    {
        Lazy(false);
        Table("ProductDetail");

        Id(x => x.ID, map => { map.Column("ID"); map.Generator(Generators.Native); });
        Property(x => x.Description, map => map.NotNullable(false));

        ManyToOne(x => x.Product, x =>
        {
            x.Column("ProductID");
        });
    }
}
public class Product : EntityBase<Product, int>, IAggregateRoot
{
    public virtual string ProductName { get; set; }
  //public virtual List<ProductDetail>  Description { get; set; }
    public virtual IList<ProductDetail> Description { get; set; }
}