nHibernate将过滤后的包映射到单个属性

时间:2012-08-02 17:15:39

标签: nhibernate mapping components one-to-many mapping-by-code

我需要将etity映射到DB的mater tabele。

此实体与另一个实体有OneToMany。

我需要将一个Collection或者一个主实体映射到Child表的所有行。

但我还需要映射一个Property,其中包含从子表中获取的单行,并按一个始终只返回一行的条件进行过滤。

像组件一样,但在过滤的子表中。

这是我的映射:

public class Test
    {
        public virtual string Id { get; set; }
        public virtual string Description { get; set; }
        public virtual IList<TestItem> Items { get; set; }
        public virtual TestItem Item { get; set; }

        public Test()
        {
            Items = new List<TestItem>();
        }
    }

    public class TestItem
    {
        public virtual string Id { get; set; }
        public virtual Test Test { get; set; }
        public virtual string ItemCode { get; set; }
        public virtual string ItemData { get; set; }
    }

    public class TestMap : ClassMapping<Test>
    {
        public TestMap()
        {
            Id(x => x.Id, m => m.Column("IDTest"));

            //IPOTETICAL
            SomeComponent(x => x.Item, c => // How to map a filtered collection to a single property??
            {
                c.Key(k =>
                {
                    k.NotNullable(true);
                    k.Column("IDTest");
                });


                **// This Is the filter**
                c.Filter("itemsFilter", f => f.Condition("ItemCode = :itemsCodeValue"));

            }, r => r.OneToMany(m =>
            {
                m.NotFound(NotFoundMode.Exception);
                m.Class(typeof(TestItem));
            }));

            Bag(x => x.Items, c =>  // All Child Rows
            {
                c.Key(k =>
                {
                    k.NotNullable(true);
                    k.Column("IDTest");
                });
                c.Cascade(Cascade.All | Cascade.DeleteOrphans);
                c.Lazy(CollectionLazy.NoLazy);
                c.Inverse(true);
            }, r => r.OneToMany(m =>
            {
                m.NotFound(NotFoundMode.Exception);
                m.Class(typeof(TestItem));
            }));
        }
    }

    public class TestItemMap : ClassMapping<TestItem>
    {
        public TestItemMap()
        {
            Id(x => x.Id, m => m.Column("IDTestItem"));

            ManyToOne(x => x.Test, m =>
            {
                m.Column("IDTest");
                m.NotNullable(false);
                m.Lazy(LazyRelation.NoLazy);
            });

            Property(x => x.ItemCode);
            Property(x => x.ItemData);
        }
    }

我发现了一些关于DynamicComponent的内容,但我不知道它是否适合我......

http://notherdev.blogspot.it/2012/01/mapping-by-code-dynamic-component.html

谢谢!!

0 个答案:

没有答案