postgresql - 通过代码休眠多对多映射
问题描述
我有一个实体类:
public class Item
{
public int Id {get; set;}
public string Name {get; set;}
public virtual IList<Item> OriginItems {get; set;}
public virtual IList<Item> ResultItems {get; set;}
}
如您所见,有两个Item
对象列表,我需要在我的数据库中以多对多关系表示它们。
这是我创建关联表的脚本:
CREATE TABLE public.item_transformation
(
origin_item_id integer NOT NULL,
result_item_id integer NOT NULL,
CONSTRAINT result_fkey FOREIGN KEY (result_item_id)
REFERENCES public.item (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT origin__fkey FOREIGN KEY (origin_item_id)
REFERENCES public.item (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
现在,我的问题是如何通过代码为这种情况定义多对多映射以及关联表的约束如何ItemTransformation
- 如何正确设置它们?
更新:现在我有这样的映射代码:
Bag(u => u.OriginItems, map =>
{
map.Table("item_transformation");
map.Key(k => k.Column("origin_item_id"));
}, ce => ce.ManyToMany(m =>
{
m.Column("result_item_id");
}));
Bag(u => u.ResultItems, map =>
{
map.Table("item_transformation");
map.Key(k => k.Column("result_item_id"));
}, ce => ce.ManyToMany(m =>
{
m.Column("origin_item_id");
}));
但它显示了用于origin_item_id
保存的值,result_item_id
反之亦然 - 它们交换了位置。
我在这里错过了什么吗?
解决方案
这是应该如何完成的:
Bag(u => u.OriginItems, map =>
{
map.Table("item_transformation");
map.Key(k => k.Column("result_item_id")); // swapped
}, ce => ce.ManyToMany(m =>
{
m.Column("origin_item_id"); // swapped
}));
Bag(u => u.ResultItems, map =>
{
map.Table("item_transformation");
map.Key(k => k.Column("origin_item_id")); // spapped
}, ce => ce.ManyToMany(m =>
{
m.Column("result_item_id"); // swapped
}));
推荐阅读
- excel - 使用 vbs 在 Excel 中将长时间运行的宏作为计划任务运行
- r - 使用 sample() 从数据中挑选 30 个随机数据?
- c# - prefab 的实例 id 是否与 GameObject 或 Transform 不同?尝试获取 InstanceID 时出现异常
- r - 添加数字 0 值
- spring - Spring 工具套件:如何为 *.js 文件设置编辑器 JavaScript?
- asp.net-core - ASP.net Core API 如何处理并发
- python - 使用 python open-cv 分割报纸文章
- vue.js - 访问元素属性时Vue $refs未定义
- r - 不能对可能存在的列进行子集化
- c++ - 持续“错误 C2220:以下警告被视为错误”