我有一个实体类:
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
中,反之亦然-它们已交换位置。
我在这里想念东西吗?
答案 0 :(得分:0)
这是应该怎么做:
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
}));