[LINQtoSQL] SubmitChanges() wirkungslos!

LINQ_Programmer

Grünschnabel
Hallo alle miteinander!

Ich habe ein gravierendes Problem:
Ich versuche mich gerade an LINQtoSql und probiere ein wenig damit herum. Im Großen und Ganzen ist mir eigentlich bezüglich LINQtoSql alles klar.
Aber ich schaffe es einfach nicht, eine neue Zeile in die DB einzufügen! Ich habe keine Ahnung, wieso. Es ist doch eh so leicht! Und bei mir will es einfach nicht funktionieren :(

Ich habe eine ganz einfache und kleine Sql-DB für Testzwecke angelgt (Orders - Order_Details). Die Main-Methode soll eigentlich nichts weiteres tun, als einen neuen Order-Satz in die Orders-Tabelle einzufügen und 2 neue dazugehörige Order_Detail-Sätze in die Order_Details Tabelle. Danach soll alles wieder aus der DB gelesen und auf die Console ausgegeben werden.

Code:
        static void Main(string[] args)
        {
            using (DatabaseDataContext db = new DatabaseDataContext())
            {

                //Order anlegen
                Order ord = new Order();
                ord.Order_id = 1;
                ord.Order_name = "Test";
                ord.price = 400;

                //ein order_detail anlegen
                Order_Detail det = new Order_Detail();
                det.Part_name = "Part1";
                det.Part_no = 1337;
                //der order zuweisen
                ord.Order_Details.Add(det);

                //selbe wie oben
                Order_Detail det2 = new Order_Detail();
                det2.Part_name = "Part2";
                det2.Part_no = 666;
                ord.Order_Details.Add(det2);

                //order in datacontext einfügen und änderungen festsetzen
                db.Orders.InsertOnSubmit(ord);
                db.SubmitChanges(); //-> anscheinend wirkungslos

                var query = from Order o in db.Orders
                            select o;

                //alles einfach ausgeben
                foreach (Order o in query)
                {
                    Console.WriteLine("ID: {0}", o.Order_id);
                    Console.WriteLine("Name: {0}", o.Order_name);
                    Console.WriteLine("Price: {0}", o.price);
                    Console.WriteLine("Details:");

                    foreach (Order_Detail d in o.Order_Details)
                    {
                        Console.WriteLine(" DetID: {0}", d.Details_id);
                        Console.WriteLine(" Name: {0}", d.Part_name);
                        Console.WriteLine(" Number: {0}", d.Part_no);
                    }
                    Console.WriteLine();
                }
            }

            Console.ReadLine();
        }

Folgende Ausgabe erhalte ich:
Code:
ID: 1
Name: Test
Price: 400
Details:
 DetID: 1
 Name: Part1
 Number: 1337
 DetID: 2
 Name: Part2
 Number: 666

Soweit, so gut. Aber diese Daten werden nicht fix in die Datenbank festgeschrieben, sie werden nur im DataContext Objekt gespeichert. Obwohl ich SubmitChanges() für das DataContext Objekt aufrufe! Und das soll eigentlich die Änderungen in der DB festsetzen. Wo liegt bei mir der Fehler?

Ich habe schon stundenlang im Internet und in der MSDN Library nach einer Lösung gesucht, aber ich finde einfach nichts. Überall steht es genau so beschrieben, wie ich es oben gemacht habe. Und tortzdem funktioniert mein Code nicht :(

Könnt ihr mir bitte helfen? Ich bin schon fast am Verzweifeln.
Danke!


EDIT:
Ich habe jetzt zum Glück selbst die Lösung gefunden: Das Problem lag daran, dass ich die DB im C# Projekt mit "Add->New Item->Service-based Database" erstellt habe. Bei der mdf-Datei war nun die "Build Action" auf "Content" eingestellt und "Copy to Output Directory" auf "Copy always".

Jetzt wurde jedes mal, wenn ich das Projekt kompiliert habe, die leere mdf-Datei in den Debug Ordner kopiert und diese DB wurde dann vom Programm verändert (bei meinem Source-Code hat also alles gepasst). Habe ich nun das Projekt nochmal kompiliert, wurde die veränderte DB wieder durch die alte DB (die ohne Daten) ersetzt.

Als Workaround habe ich nun beim ConnectionString in der Settings.settings File einen absoluten Pfad zur mdf-Datei angegeben anstatt von |DataDirectory|. Diese Lösung ist aber nicht so elegant, oder? Da gibt es sicher noch etwas besseres. Hat irgendjemand Vorschläge?

Und könnte mir jemand bitte erklären, was die ganzen Optionen bei "Build Action" genau bedeuten? Bei einigen Optionen habe ich überhaupt keinen Plan, was sie bewirken sollten.

Danke!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück