我已经设置了一个看起来像这样的实体:
public partial class Test
{
public Test()
{
}
public int Id { get; set; }
public virtual Test2 Test2 { get; set; }
//and some other fields
}
test2
是另一个测试对象,没有导航属性:
public partial class Test2
{
public int Id {get;set;}
public string Name {get;set;}
}
我在上下文中没有模型构建器设置,它仅具有DbSet
和test
的{{1}}属性。
我正在尝试根据我根据用户输入创建的未附加对象更新数据库中的行。在此测试用例中,test2
属性为null,我正在尝试将其更新为3:
Test2
问题在于,这不会将数据库中的static void Main(string[] args)
{
using(var context = new db.Model1())
{
var test = new db.Test();
// we know id 1 exists for this simple test case
test.Id = 1;
// fake user input is 3 for test2 id
test.Test2 = context.Test2.Where(x => x.Id == 3).FirstOrDefault();
context.Test.Attach(test);
context.Entry(test).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
}
}
列更改为3。我缺少什么?
我已经确定,如果我不是使用Test_Id
创建测试对象,而是从上下文中查询它然后进行更新,则它可以正常工作(如下所示):
new()
如果将对象附加到上下文并将其状态设置为Modifyed,为什么我的第一种方法不起作用?我可以不用没有单独的var test = context.Test.FirstOrDefault(x => x.Id == 2);
test.Test2 = context.Test2.FirstOrDefault(x => x.Id == 3);
context.SaveChanges();
字段来显示外键关系吗?