Avatar billede mysitesolution Nybegynder
10. marts 2008 - 22:30 Der er 11 kommentarer og
1 løsning

Linq og Insert

Hej...

Jeg har 2 tabeller som ser sådan ud:

[Tabel1]
int ID, PK

[Tabel2]
int ID, PK, FK (til Tabel1.ID)
bigint MaxVærdi

Det har jeg kørt igennem SQLmetal, så jeg kan bruge LINQ på det.

Jeg skriver så:

Database db = new Database("conn");

Tabel1 tbl1 = new Tabel1();
Tabel2 tbl2 = new Tabel2()
{
  Table1Ref = tbl1;
};

db.Tabel1.InsertOnSubmit(tbl1);
db.Tabel2.InsertOnSubmit(tbl2);

og får fejlen:
The INSERT statement conflicted with the FOREIGN KEY constraint

Hvad gør man for at sine foreign keys virker?

db.SubmitChanges();



db.Tabel1.Insert
Avatar billede nielle Nybegynder
10. marts 2008 - 22:45 #1
Nu har jeg så ikke lige prøvet SqlMetal selv, men...

Er der ikke en datacontext eller lign. hvor at du kan kole dig på log-propertyen og se hvad det er for en SQL den forsøger at udføre?
Avatar billede mysitesolution Nybegynder
10. marts 2008 - 22:46 #2
jo der er en datacontext, kan lige prøve at se om jeg kan nappe sql'en
Avatar billede mysitesolution Nybegynder
10. marts 2008 - 22:55 #3
Database db er i sig selv en System.Data.Linq.DataContext. Synes kun jeg kan finde SQL'en for select, idé om hvor jeg kan?
Avatar billede nielle Nybegynder
10. marts 2008 - 23:00 #4
Hvad udskrives der hvis du lytter med på log'en?
Avatar billede mysitesolution Nybegynder
10. marts 2008 - 23:44 #5
Hvilken log?
Avatar billede mysitesolution Nybegynder
10. marts 2008 - 23:50 #6
Kan se på min sql log, at den kun prøver en insert, og derefter SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
Avatar billede mysitesolution Nybegynder
11. marts 2008 - 00:21 #7
Glemte der er auto_increment på tabel1

[Tabel1]
int ID, PK, auto_increment

[Tabel2]
int ID, PK, FK (til Tabel1.ID)
bigint MaxVærdi
Avatar billede nielle Nybegynder
11. marts 2008 - 08:56 #8
> Glemte der er auto_increment på tabel1

Køre du det imod en MySQL database - i MS SQL hedder det jo identity.

Jeg er ikke klar over hvorvidt at LINQ for SQL understøtter noget andet end SQL Server og SQL Experess lige nu - svjv. er det MySQL der skal lave en provider hvis det også skal fungere for MySQL.

Bortset fra det, så burde systemet ikke have problemer med at et felt er autoincrementerende (men det skal selvfølgeligt være opmærket som sådan i entitesklasserne).

...

I dine tabeller har du både et ID og et PK felt. Jeg gætter på at PK står for Primary Key - må jeg spørge hvorfor at du ikke bruget ID-feltet som dit primary key felt?

Er det i øvrigt ID eller PK feltet (eller begge) som der er auto_increment på? Jeg spekulere lidt på om det ikke er noget i den stil der er problemer med?

...

SQL'erne ser nu fornuftige nok ud.

Hvis du nu udkommentere linjen:

// db.Tabel2.InsertOnSubmit(tbl2);

burde det hele køre igennem uden problemer. Har du mulighed for at gøre dette og så lige tjekke på om ID og PK felterne faktisk bliver opdateret med de samme værdier som de får i basen?
Avatar billede mysitesolution Nybegynder
11. marts 2008 - 10:08 #9
Det er MSSQL... og Identity

Tror du har misforstået min opsætning... Der er kun 2 felter i Tabel2, ID, og Maxværdi. Resten er attributter til felterne.
Avatar billede mysitesolution Nybegynder
11. marts 2008 - 10:20 #10
Har fået det til at virke :) havde åbenbart byttet om på foreign key .. hhm
Avatar billede nielle Nybegynder
11. marts 2008 - 10:45 #11
Fint. :^)

Jamen så skal du vel bare smide et svar og tage dine point igen.
Avatar billede mysitesolution Nybegynder
11. marts 2008 - 11:02 #12
...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester