gpt4 book ai didi

c# - 映射一个简单的数组

转载 作者:可可西里 更新时间:2023-11-01 08:22:14 25 4
gpt4 key购买 nike

我正在使用流利的 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; }
}

这是 map :

 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 的实例时,我有一个 Invalid 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);
}
}

进入数据库的结果是:

alt text

问候, ionic

关于c# - 映射一个简单的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com