Добавление дополнительных записей к существующим отношениям не работает - PullRequest
2 голосов
/ 20 июня 2020

Я пытаюсь добавить новый Template к существующему Client, но когда я пытаюсь добавить Template с существующим ClientID, вместо этого добавляется новый Template с новым ClientID, а не t ie новый шаблон к существующему ClientID

Я использую следующий код, чтобы определить, существует ли Template с текущим Client. Если нет, я создаю Template с переданным в существующем 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];
    }
 }

Я получаю следующее:

SQL Таблица

Я бы хотел добавить Template с существующим ClientId из 18, а не добавлять новый Client с идентификатором 19 и t ie к Template.

Что я делаю не так?

Спасибо.

1 Ответ

1 голос
/ 20 июня 2020
Экземпляр

Client c, который вы передаете своему методу, не привязан к текущему экземпляру Context, поэтому он добавляет новый Client и привязывает к нему шаблон. Существует несколько способов решения этой проблемы, если у вас есть свойство TemplateClient_Id, настроенное для вашего объекта Template, вы можете просто установить его вместо назначения клиента, заменив:

t.TemplateClient = c;

на:

t.TemplateClient_Id = c.Id;

В противном случае вы можете прикрепить Client экземпляр к контексту базы данных:

Context.Attach(c);
t.TemplateClient = c;
Context.Templates.Add(t);
Context.SaveChanges();
...