2016-07-22 11 views
0

Ich bin zurück zu Entity-Framework für ein Projekt gegangen. Meine Datenbankbeziehungen werden für die Datenbank erzwungen, nicht nur für die Business-Schicht.Entity Framework persitierenden Datensatz zu DB

Ich habe eine Fremdschlüsseleinschränkung, wenn ich versuche, einen Datensatz hinzuzufügen, der gerade einen neuen untergeordneten Datensatz erstellt hat.

Unten ist ein einfaches Beispiel für meine Tabelle und Codee.

Haupt Tabelle

  • Id int (pk)
  • childID int (fk)
  • -Name nvarchar (50)

Kindertisch - Id int (pk) - Name nvarch (50)

private static int addChild(string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBChildTable() { Name = name }; 
      context.DBChildTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static int addMain(int childId, string name) 
    { 
     using (var context = new DatabaseEntity()) 
     { 
      var table = new DBMainTable() { Name = name, ChildId = childId }; 
      context.DBMainTable.Add(table); 
      context.SaveChanges(); 

      return table.Id; 

     } 
    } 

    private static void basiceLogic() 
    { 
     int childId = addChild("Child"); 
     addMain(childId, "Main"); 
    } 

Ich benutze Entity Framework 6 und eine SQL Server Backend-Datenbank.

Ich erinnere mich, dass ich einen Befehl zum Kontext oder irgendwo hinzufügen musste, um dem Code zu sagen, dass er den Datensatz aus dem Entity-Framework im Speicher an die Datenbank persistieren soll.

Irgendwelche Hilfe?

Dank

+0

Was ist Ihre Frage? Code, den Sie freigegeben haben, sollte funktionieren. – lorond

+0

SaveChanges() ist der Befehl :) – marius

+0

Hallo, ich weiß. Wenn ich die zweite Methode zum Hinzufügen der Hauptelemente anwähle, klagt es über die Fremdschlüsseleinschränkung für die Kind-ID. Aber wenn die Methode erneut ausgeführt wird, wird die childId vom ersten Versuch an verwendet. –

Antwort

0

Nachdem zu diesem Thema zu lange zu verbringen und hin und her zwischen Foren gingen, habe ich endlich ein Ergebnis.

Unten ist Code, den ich ändern musste, um es zur Arbeit zu bringen, aber jetzt funktioniert es. (Der verwendete Code ist der Code im Beispiel)

Ich musste hinzufügen und neu erstellen des Kontexts hinzufügen. Obwohl ich ursprünglich den Kontext innerhalb einer Verwendung und einer statischen Methodenlogik hatte, war der Kontext nicht wirklich verfügbar. Daher würde der neue Datenbankdatensatz nicht in der Datenbank verbleiben, bevor er innerhalb der zweiten Einfügung abgefragt wurde.

Vielen Dank an alle, die versucht haben zu helfen, aber ich dachte, ich würde meine Entschlossenheit nur dort aufstellen, jemand da draußen, der dieses nette kleine Problem hat.

private static Models.Blog.blogEntity context; 
    public static string AddComment(int blogId, string email, string name, string comment) 
    { 
     context = new Models.Blog.blogEntity();     
     string blogName = String.Empty; 

     blogName = Models.Blog.Queries.BlogQuery.NameById(blogId); 

     getUserId(email); 

     createUser(email, name); 

     context.Dispose(); 
     context = new Models.Blog.blogEntity(); 

     createComment(blogId, userId, comment); 

     context.Dispose(); 
     return blogName; 

    } 


    private static void getUserId(string email) 
    { 
     userId = 0; 
     var user = context.users.FirstOrDefault(x => x.emailAddress.Equals(email)); 
     if(user !=null) 
     { 
      userId = user.id; 
     } 
    } 

    public static void createUser(string emailAddress, string name) 
    { 
     if(userId.Equals(0)) 
     { 
      var data = new Models.Blog.user() 
      { 
       emailAddress = emailAddress, 
       name = name, 
       password = "NOT NEEDED", 
       userlevel = 0, 
       created = DateTime.Now 
      }; 
      context.users.Add(data); 
      context.SaveChanges();     
      userId = data.id; 
     }   


    } 

    public static void createComment(int blogId, int userId, string comment) 
    {   

     var data = new Models.Blog.comment() 
     { 
      body = comment, 
      blogId = blogId, 
      createdBy = userId, 
      created = DateTime.Now 
     }; 
     context.comments.Add(data); 
     context.SaveChanges(); 
     commentId= data.id;   
    } 
Verwandte Themen