Обновите запись в соответствии с идентификатором вставленной записи в LINQ to SQL - PullRequest
0 голосов
/ 08 мая 2011

Я хочу вставить запись и затем обновить запись в соответствии с scope_identity вставленной записи. Я делаю это, но когда я хочу обновить свою запись, возникает ошибка.

WorkshopDataContext Dac = new WorkshopDataContext();
Dac.Connection.ConnectionString = "Data Source=dpsxxx-xxx;Initial Catalog=kar;User ID=sa;Password=xxxx";
Tbl_workshop Workshop = new Tbl_workshop();
Workshop.StateCode = Bodu.BduStateCode;
Workshop.CityCode = Bodu.BduCityCode;
Workshop.Co_workshop=12222;
Dac.Tbl_workshop.InsertOnSubmit(Workshop);
Dac.SubmitChanges();
Int64 Scope = Workshop.id;
var query = from record in Dac.Tbl_workshop where record.id == Scope select record;
        query.First().co_Workshop = Scope;
Dac.SubmitChanges();

и это ошибка:

Value of member 'co_Workshop' of an object of type 'Tbl_Workshop' changed.
A member defining the identity of the object cannot be changed.
Consider adding a new object with new identity and deleting the existing one instead.

Ответы [ 2 ]

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

Если вы правильно сконфигурировали свою модель Linq-to-SQL для отображения столбца IDENTITY в вашей таблице, у вас должно появиться новое значение сразу после .SubmitChanges():

Tbl_workshop Workshop = new Tbl_workshop();
Workshop.StateCode = Bodu.BduStateCode;
Workshop.CityCode = Bodu.BduCityCode;
Workshop.Co_workshop=12222;

Dac.Tbl_workshop.InsertOnSubmit(Workshop);
Dac.SubmitChanges();

Int64 workshopID = Workshop.Id;  // you should get new ID value here - automatically!!

Вы наделилине нужно ничего делать, например, считывать это новое значение из SQL Server или что-либо еще - Linq-to-SQL должен автоматически обновить ваш объект Workshop, указав правильное значение.

enter image description here

Обновление: для обновления значения co_workshop до значения, заданного IDENTITY ID, сделайте это (просто установите значение co_workshop и сохраните снова - это действительно все, что есть):

Dac.Tbl_workshop.InsertOnSubmit(Workshop);
Dac.SubmitChanges();

Int64 workshopID = Workshop.Id;  // you should get new ID value here - automatically!!

Workshop.Co_workshop = workshopID;
Dac.SubmitChanges();
0 голосов
/ 08 мая 2011

Как сказано в сообщении об ошибке, вы не можете изменить co_Workshop из-за его идентичности (значение автоинкремента).Чтобы свободно редактировать его, вам нужно отредактировать базу данных и удалить этот параметр.

Вероятно, происходит то, что и id, и co_Workshop устанавливаются как идентификаторы.Просто отключите опцию идентификации в co_Workshop.

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