C# 向现有关系添加其他记录不起作用
我试图向现有的C# 向现有关系添加其他记录不起作用,c#,.net,entity-framework,C#,.net,Entity Framework,我试图向现有的客户端添加一个新的模板,但当我试图使用现有的客户端ID添加模板时,它会使用新的客户端ID添加一个新的模板,而不是将新模板绑定到现有的客户端ID 我使用以下代码来确定当前客户端是否存在模板。如果没有,我将使用传入的现有客户端创建一个模板 public Template GetCurrentTemplate(Client c, string TemplateName) { using (var Context = new mssDBContext()) {
客户端添加一个新的模板
,但当我试图使用现有的客户端ID
添加模板
时,它会使用新的客户端ID
添加一个新的模板
,而不是将新模板绑定到现有的客户端ID
我使用以下代码来确定当前客户端是否存在模板
。如果没有,我将使用传入的现有客户端创建一个模板
public Template GetCurrentTemplate(Client c, string TemplateName)
{
using (var Context = new mssDBContext())
{
List<Template> CurrentTemplates = Context.Templates.Where(x => x.TemplateName == TemplateName && x.TemplateClient.Id == c.Id).ToList();
if (CurrentTemplates.Count == 0)
{
Template t = new Template { TemplateName = TemplateName};
t.TemplateClient = c;
Context.Templates.Add(t);
Context.SaveChanges();
return t;
}
else
return CurrentTemplates[0];
}
}
公共模板GetCurrentTemplate(客户端c,字符串TemplateName)
{
使用(var Context=new mssDBContext())
{
列出CurrentTemplates=Context.Templates.Where(x=>x.TemplateName==TemplateName&&x.TemplateClient.Id==c.Id).ToList();
如果(CurrentTemplates.Count==0)
{
模板t=新模板{TemplateName=TemplateName};
t、 TemplateClient=c;
Context.Templates.Add(t);
SaveChanges();
返回t;
}
其他的
返回当前模板[0];
}
}
我得到的是:
我想要的是使用现有的ClientId
添加模板
,而不是添加Id为19的新客户端
,并将其绑定到模板
我做错了什么
谢谢。传递给方法的客户机c
实例不受当前上下文实例的约束,因此它会添加一个新的客户机
,并将模板绑定到它。如果您在模板
实体上设置了TemplateClient\u Id
属性,则该问题几乎没有解决方法。您只需对其进行设置,而无需通过替换来分配客户端:
t.TemplateClient = c;
与:
否则,您可以将客户端
实例附加到db上下文:
Context.Attach(c);
t.TemplateClient = c;
Context.Templates.Add(t);
Context.SaveChanges();
谢谢你,我在其他地方看到过Attach,但我拒绝了它,因为我的上下文和你写的一样,没有一个直接的Attach方法?不管怎样,我添加了“Context.Clients.Attach(c)”,似乎效果不错:)@MajorSqueeze是的,我的代码是EF Core的,似乎EF6和以前的版本在DbSet
级别上有Attach
。我很乐意帮忙!
Context.Attach(c);
t.TemplateClient = c;
Context.Templates.Add(t);
Context.SaveChanges();