Дублирующая строка состояния при вставке работника - PullRequest
1 голос
/ 04 мая 2011

Я использую структуру лица.У меня есть рабочая таблица:

Worker(workerId, name, statusId)

У меня есть POCO для работника со свойством навигации:

class Worker {
   public virtual long workerId {get;set;}
   public virtual string name {get;set;}
   public virtual long statusId {get;set;}
   public virtual Status status {get;set;}
}

Чтобы вставить работника, я заполняю имя, идентификатор статуса и даже статус(свойство навигации) с соответствующими значениями.Но вместо того, чтобы вставлять только рабочий, он вставляет также статус и создает новую строку для того же статуса (даже если я заполняю statusId и id внутри объекта status).

Почему он вставляет запись? ..

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Вы можете прикрепить Статус к контексту, если не хотите создавать новый:

var myStatus = new Status { statusId = 123, ... };
var myWorker = new Worker { status = myStatus, ... };

context.Stati.Attach(myStatus);
context.Workers.Add(myWorker)

context.SaveChanges();

Если Worker.statusId - это столбец открытого внешнего ключа, также можно просто назначить его новому рабочему:

var myWorker = new Worker { statusId = 123, status = null, ... };

context.Workers.Add(myWorker)

context.SaveChanges();

Здесь важно, чтобы свойство навигации status было null.

0 голосов
/ 04 мая 2011

Чтобы вставить, установите только statusId и оставьте статус как ноль.
Это сделает вставку без дубликатов ассоциаций.
Если вы заполните объект статуса, объект каркаса будет рассматривать его как новый объект (или строку).

0 голосов
/ 04 мая 2011

Если статус существует, вы должны установить statusid с этим идентификатором. Или вам придется получить этот статусный объект и присвоить его свойству объекта.

В предыдущей версии EF вы должны получить объект состояния или установить значение entitykey в качестве идентификатора состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...