映射一个简单的数组
作者:互联网
我正在使用流利的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