其他分享
首页 > 其他分享> > 映射一个简单的数组

映射一个简单的数组

作者:互联网

我正在使用流利的Nhibernate映射一个简单的类
并使用Schema Generation在MySQL DB上创建此类.
我不能使用IList<>我的属性(我正在映射跨语言域类)
所以我必须使用简单的数组.

我希望NHibernate在两个类之间创建一个连接表,
这些是域类:

    public class ClassOne
    {
        public virtual Guid Guid { get; set; }
        public virtual String Title { get; set; }
        public virtual ClassTwo[] Tags { get; set; }
    }

    public class ClassTwo
    {
        public virtual Guid Guid { get; set; }
        public virtual string Title { get; set; }
    }

这是地图:

 public class ClassOneMap : ClassMap<ClassOneMap>
    {
        public ClassOneMap ()
        {
            Id(x => x.Guid).GeneratedBy.GuidComb();
            Map(x => x.Title);
            HasManyToMany(x => x.Tags)
                .Cascade.SaveUpdate());

        }
    }

    public class ClassTwoMap : ClassMap<ClassTwo>
    {
        public ClassTwoMap()
        {
            Id(x => x.Guid).GeneratedBy.GuidComb();
            Map(x => x.Title);
        }
    }

模式产生了很大的效果!它具有一个ClassOne,ClassTwo和ClassTwoToClassOne表
但是,当我尝试保留ClassOne的实例时,我有一个无效的Cast异常.
这可以通过将数组更改为IList来解决,但我实际上不能做到.

谁能告诉我如何配置Fluent映射以使用数组而不更改架构体系结构?

非常感谢!

解决方法:

好的,绕过这个问题,希望能解决问题.

因此模型是:

 public class ClassOne : Entity
    {
        public virtual string Title { get; set; }

        public virtual ClassTwo[] Tags { get; set; }

     }

    public class ClassTwo : Entity
    {
        public virtual string Title { get; set; }
    }

基类包含Id定义,在我的情况下很长. Guids应该不会有问题

映射类:我们使用FluentNhibernate进行一些约定,这个想法也存在于HasManyToMany中

public class ClassOneMappingOverride : IAutoMappingOverride<ClassOne>
    {
        public void Override(AutoMapping<ClassOne> mapping)
        {
            mapping.HasManyToMany(x => x.Tags).AsArray(x => x.Id).ParentKeyColumn("classOneId")
                .ChildKeyColumn("classTwoId")
                .Table("ClassOneLinkClassTwo")
                .Cascade.SaveUpdate();
        }
    }

请注意,如果您未指定ParentKey,ChildKey和Table,则不会创建链接表.

插入数据的单元测试如下:

 public class ClassOneDataPart : DataPartBase, IDataPart
{
    public void AddToDatabase()
    {
        var classOne = new ClassOne { Title = "classOne" };

        var classTwo1 = new ClassTwo { Title = "class21" };
        var classTwo2 = new ClassTwo { Title = "class22" };

        var tags = new[] { classTwo1, classTwo2 };

        classOne.Tags = tags;

        this.SaveData(classOne);
        this.SaveData(classTwo1);
        this.SaveData(classTwo2);
    }
}

结果存入数据库是:

问候,
离子

标签:nhibernate,c,mysql,fluent-nhibernate
来源: https://codeday.me/bug/20191208/2094848.html