'Adding additional records to existing relationship not working
I am trying to add a new Template
to an existing Client
, but when I try to add the Template
with an existing ClientID
, it instead adds a new Template
with a new ClientID
, not tie the new Template to the existing ClientID
I use the following code to determine if the Template
exists with the current Client
. If not, I create a Template
with the passed in existing Client
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];
}
}
What I get is this :
What I would like is it to add the Template
with the existing ClientId
of 18, and not add a new Client
with an Id of 19 and tie that to the Template
.
What am I doing wrong?
Thanks.
Solution 1:[1]
Client c
instance you pass to your method is not tracked by the current instance of Context
so it adds a new Client
and binds template to it. There are few workarounds to the issue if you have TemplateClient_Id
property set up on your Template
entity you can just set it instead of assigning client by replacing :
t.TemplateClient = c;
with:
t.TemplateClient_Id = c.Id;
Otherwise you can attach Client
instance to db context:
Context.Attach(c);
t.TemplateClient = c;
Context.Templates.Add(t);
Context.SaveChanges();
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |