【发布时间】:2020-02-20 21:03:13
【问题描述】:
我有三个表,它们组合起来代表了多对多的关系。即两个表和一个连接表。
这在代码中表示如下:
public partial class Test1
{
public Test1()
{
Test1_Test2= new HashSet<Test1_Test2>();
}
public int Id { get; set; }
..
public virtual ICollection<Test1_Test2> Test1_Test2{ get; set; }
[NotMapped]
public ICollection<Test2s> Test2
{
get => Test1_Test2.Select(r => r.Test2).ToList();
set => Test1_Test2 = value.Select(v => new Test1_Test2()
{
Test2Id = v.Id
}).ToList();
}
}
public partial class Test2
{
public Test2()
{
Test1_Test2= new HashSet<Test1_Test2>();
}
public int Id { get; set; }
..
public virtual ICollection<Test1_Test2> Test1_Test2{ get; set; }
}
public partial class Test1_Test2
{
public int Test1Id{ get; set; }
public int Test2Id{ get; set; }
public virtual Test1 Test1{ get; set; }
public virtual Test2 Test2{ get; set; }
}
正如您在Test1 的模型中看到的那样,我添加了一个“非映射”实体,用于分别获取 Test2 的对象,无需通过连接表,并添加两个实体之间的关系连接表中的 Test1 和 Test2。
在这里,我已经成功地使用 getter 获取了我的 Test2 对象,如下所示:
var variable = _context.Test1.Include(x => x.Test1_Test2).ThenInclude(x => x.Test2).Where(c => c.Id == Test1.Id);
不幸的是,当我尝试通过 setter 在联接表"Test1_Test2" 中添加关系时,什么都没有发生,这是我的方法:
test1variable.Test2s.Add(test);
_context.Test1.Update(test1variable);
_context.SaveChanges();
我是否错误地使用了我的设置器,还是有更“正确”的方法来解决这个问题?
【问题讨论】:
-
test1variable.Test2s的定义是什么?它似乎没有出现在您给出的模型定义中。
标签: c# .net entity-framework asp.net-core