2012-04-08 5 views
0

Hier ist mein Code nach Modifikationen, scheint die Dinge arbeiten gut, aber ich erhalte eine Fehlermeldung auf _db.SubmitChanges();Kopieren oder Klon Zeilen von SQL Server-Tabelle

Fehler ist

Kann nicht eine Einheit mit einem Schlüssel hinzufügen, dass wird bereits verwendet.

Code:

foreach (tblCourseNeededHours record in thisTable) 
{ 
      tblCourseNeededHours newCNHR = new tblCourseNeededHours(); 
      newCNHR.Semester = a_semesterToOrganize; 
      newCNHR.AssignToInstituteAdministrator = false; 
      newCNHR.Freezed = false; 

      _db.tblCourseNeededHours.InsertOnSubmit(newCNHR); 
} 

// submit all the changes 
_db.SubmitChanges(); 

Ich verwende MVC 2.0 und SQL Server. Ich habe eine Tabelle mit dem Namen tblCourses.

Ich möchte Zeilen basierend auf einigen Auswahlkriterien auswählen, dann möchte ich diese Zeilen an tblCourse anfügen.

Muss ich eine temporäre Tabelle tmpCourse erstellen und diese ausgewählten Zeilen ausfüllen und dann diese zurück an tblCourse anhängen? Oder kann ich es ohne temporäre Tabelle tun?

Irgendein Vorschlag, Postlink?

Antwort

3

Ich glaube, Sie nur so etwas wie tun:

INSERT INTO dbo.tblCourse(list of columns) 
    SELECT (list of columns) 
    FROM dbo.tblCourse 
    WHERE (your condition here.....) 

Natürlich muss die Liste der Spalten übereinstimmen, z.B. Sie müssen die gleiche Anzahl von Spalten und die gleichen Datentypen haben. Sie können auch keine Werte in z. IDENTITY oder berechnete Spalten.

Update: Um dies in Linq-to-SQL zu tun, müssten Sie eine Entität haben, die Ihre Daten in irgendeiner Weise darstellen kann. Dann:

  • wählen Sie die Daten aus der vorhandenen Datenbank in eine List<Entity> (oder was auch immer Ihr Unternehmen genannt wird, wirklich)
  • schaffen neue Objekte (Entitäten), basierend auf denen abgerufen - Ihre Eigenschaften ändern, wie
  • Einsatz erforderlich diese Einheiten zurück in den Datenkontext
  • speichern Sie die Änderungen.

Etwas nach dem Vorbild dieses Code-Schnipsels (hier Ich habe eine Tabelle, die ein countriesISOCode und CountryName für einige Länder hat, ich bin ein paar Auswahl und neues auf denen abgerufen Basis zu schaffen, die das Hinzufügen neue zu dem Linq-to-SQL DataContext und am Ende zu speichern):

// create and use the Linq-to-SQL DataContext 
using (LinqSampleDataContext ctx = new LinqSampleDataContext()) 
{ 
    // select some data 
    IQueryable<country> existingCountries = ctx.countries.Where(c => c.CountryID < 100); 

    // loop over selected data - create new entities based on data retrieved 
    foreach (country c in existingCountries) 
    { 
     country newCountry = new country(); 
     newCountry.CountryName = c.CountryName; 
     newCountry.ISOCode = "X" + c.ISOCode.Substring(1); 

     // add new entities to DataContext 
     ctx.countries.InsertOnSubmit(newCountry); 
    } 

    // submit all the changes 
    ctx.SubmitChanges(); 
} 
+0

ich Linq to SQL verwenden, Kann mir jemand helfen, oben erwähnte Abfrage in LINQ to SQL zu übersetzen. Ich bin auf sehr Anfänger Ebene in diesem Fall – Jawad

+1

@Jawad: aktualisiert meine Antwort mit einem Linq-to-SQL-Beispiel –

+0

überprüfen Sie bitte den Update-Code, ich bin receving Fehler auf einer letzten Zeile des Codes, der Fehler ist "Kann nicht hinzufügen Entität mit einem Schlüssel, der bereits verwendet wird. " – Jawad