[LINQ to SQL] Primary key veld updaten niet mogelijk?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mnstrspeed
  • Registratie: Oktober 2007
  • Laatst online: 11-09 14:49
Ik ben voor school de afgelopen dagen druk bezig geweest met LINQ to SQL in combinatie met ASP.NET MVC. Na een mooie applicatie te hebben gebouwd, kwam ik echter tot de ontdekking dat ik geen enkel primary key veld aan kan passen:

C#:
1
2
3
4
5
6
7
8
Vlucht vlucht = dataContext.Vluchts.First();
vlucht.vluchtnummer = 9999; // komt uiteraard nog niet in de tabel voor

dataContext.SubmitChanges();
/* System.InvalidOperationException
Value of member 'vluchtnummer' of an object of type 'Vlucht' 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. */


Tabeldefinitie (SQL Server 2008):
SQL:
1
2
3
4
5
6
CREATE TABLE Vlucht(
    vluchtnummer NUMERIC(5) NOT NULL,
    ...
    CONSTRAINT pk_Vlucht PRIMARY KEY(vluchtnummer),
    ...
)


Welke door Visual Studio gemapt is als:

C#:
1
2
3
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_vluchtnummer", DbType="Decimal(5,0) NOT NULL", IsPrimaryKey=true)]
public decimal vluchtnummer
{ ... }


Wanneer ik de waardes handmatig probeer te updaten met een UPDATE-statement in SQL, is er niets aan de hand. Het probleem ligt dus bij LINQ to SQL (of het ORM framework). Ik ben het internet nu al zeker twee uur aan het afzoeken, maar ben tot nu toe weinig tegengekomen.

Zie ik hier iets over het hoofd of is hier sprake van een absurde beperking van LINQ to SQL?

Ehhh wat?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik vraag me eerst af waarom je een PK veld wil wijzigen. Zeg nooit nooit, maar dit is toch heel vaak iets wat wijst op een slecht ontwerp van de DB danwel software. In de meeste gevallen zal blijken dat je beter een synthetic primary key had kunnen gebruiken.

[ Voor 21% gewijzigd door RobIII op 17-01-2011 08:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ik ken LINQ niet goed, maar meeste OR-mappers willen toch wel graag 1 constante houden tussen de objecten en de dbase. Een PK lijkt mij daar uitermate geschikt voor

Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 11:37

defcon84

Multipass?

L2S laat geen PK updates toe.. als je 'm toch wil aanpassen zal je het via de .ExecuteCommand van de datacontext moeten doen

Acties:
  • 0 Henk 'm!

  • Mnstrspeed
  • Registratie: Oktober 2007
  • Laatst online: 11-09 14:49
De structuur van de database mag niet veranderd worden (vooraf aangeleverd, dus ook niet zelf ontworpen), dus dan houdt het daar op. Ik zie het namelijk ook niet zitten om handmatig SQL-statements uit te voeren. Er zit een goede reden achter, dus het ontbreken van een klein stukje functionaliteit is ook niet het einde van de wereld. :)

Bedankt voor de opheldering!

Ehhh wat?