使用Fluent NHibernate映射集合类型

时间:2010-07-11 09:22:53

标签: collections fluent-nhibernate nhibernate-mapping

我在我的项目中使用了Fluent NH,但是在使用Collection类时遇到了一些问题。这是我的课程的代码

 public class Vendor
 {


    public virtual int Id { get; set; }

    public virtual string Name { get; set; }

    public virtual Services Services { get; set; }

 }



 public class Services : IList<Service>
    {
    }


public class Service
   {

    int id{ get; set; }
    int Code { get; set; }
   }

这不是将服务列为供应商类中的列表

public virtual IList<Service> Services { get; set; }

我想使用服务集合类。

和映射代码

 public class VendorMap : ClassMap<Vendor>
    {
        public VendorMap()
        {
            Table("Vendor");

            Id(x => x.Id);
            Map(x => x.Name);


            HasMany<Service>(x => x.Services)
                .KeyColumn("Vendor_Id")
                .CollectionType<Services>()
                .Not.LazyLoad();

        } 

我收到此错误“自定义类型未实现UserCollectionType:Services”

关于如何映射这个的任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

HasMany(x => x.Services)
    .KeyColumn("Vendor_Id")
    .AsBag()
    .Cascade.All()
    .Not.LazyLoad();

这对我很有用!

答案 1 :(得分:0)

NHibernate不允许映射此类型的集合类。它们必须是一个接口,如IList<T>,因为NHibernate提供了它自己的实现。

这个实现显然不符合Services类的接口,因此NHibernate无法映射它。