2016-04-20 6 views
0

Meine Personen Klasse hinzufügen:Rahmen Entity kann nicht mit Singletons

public class User 
{ 
    public int Id { get; private set; } 

    public string Isim { get; set; } 

    public string Soyad { get; set; } 

    public User(string isim, string soyad) 
    { 
     Isim = isim; 
     Soyad = soyad; 
    } 
} 

Meine UserBusiness Klasse:

public sealed class UserBusiness 
{ 
    JuqueryDbEntities entity = new JuqueryDbEntities(); 

    private static volatile UserBusiness instance; 
    private static readonly object syncRoot = new Object(); 

    private UserBusiness() { } 

    public static UserBusiness Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       lock (syncRoot) 
       { 
        if (instance == null) 
         instance = new UserBusiness(); 
       } 
      } 

      return instance; 
     } 
    } 

    public void AddUser(User userToAdd) 
    { 
     entity.PersonelTable.Add(userToAdd); 
     entity.SaveChanges(); 
    } 
} 

Und schließlich Onclick meine webform Code-Behind eines Login-Button:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string isim = TextBox1.Text; 
     string soyad = TextBox2.Text; 
     var newUser = new User(isim, soyad); 
     UserBusiness.Instance.AddUser(newUser); 
    } 

Hier ist mein Problem: Ich erhalte einen Fehler in der AddUser-Methode meiner UserBusiness-Klasse. Ein Fehler in 'entity.PersonelTable.Add (newUser);' Zeile sagt 'Die beste Überladungsmethode für' System.Data.Entity.DbSet.Add (SuperQquery.PersonelTable) 'hat einige ungültige Argumente.' Was mache ich falsch (Btw meine ID ist Autoincrement, so dass ich es keinen Wert einstellen.)

+1

Es sieht so aus, als ob die Methode 'AddUser()' kein Argument vom Typ User akzeptiert. Hast du überprüft, was die Argumente sind? –

+0

Ich habe es debugged und 'userToAdd' Obhect enthält genau eingegebene Werte, so sollte es kein Problem geben, aber ich bekomme diesen Fehler @ BarryO'Kane –

+0

'userToAdd' ist nicht das Problem. Bewegen Sie den Mauszeiger über die Schaltfläche "Hinzufügen" in der Zeile "entity.PersonelTable.Add (userToAdd)" in der Klasse "UserBusiness", und Sie sollten den Typ der Methode sehen. Ich vermute, dass es nicht "User" ist. –

Antwort

1

Ihr Problem hier ist, dass die Methode Add von System.Data.Entity.DbSet einfach Argument des Typs Benutzer nicht nimmt. wie in dem genannten Fehler

System.Data.Entity.DbSet.Add (SuperQquery.PersonelTable)‘hat einige ungültige Argumente

es Objekte vom Typ SuperQquery.PersonelTable

So nimmt das, was Sie müssen die AddUser-Methode ändern

public void AddUser(User userToAdd) 
{ 
    SuperQquery.PersonelTable pt = new SuperQquery.PersonelTable(); 
    pt.FieldName1 = userToAdd.Isim; 
    pt.FieldName2 = userToAdd.Soyad; 

    entity.PersonelTable.Add(pt); 
    entity.SaveChanges(); 
} 

Dabei ist FieldName der Name s von Spalten in der Tabelle der Datenbank

EDIT: Wenn das funktioniert, können wir sagen, dass Sie eine Konvertierung vom Typ Benutzer in den Typ SuperQquery.PersonelTable die Art, wie Sie Daten in die Datenbank einfügen können, aber der beste Weg hier ist Um die Klasse Benutzer durch eine neue Klasse PersonalTable mit der gleichen Logik zu ändern. Keine Notwendigkeit, eine Umwandlung durchzuführen.

+0

Es hat funktioniert, ich habe auch versucht, die andere Art, wie Sie erwähnt und es funktioniert auch. Ich werde die zweite Methode verwenden, da du gesagt hast, dass es ein besserer Weg ist. Danke –

+0

@BatuhanOzdal Sie müssen die andere Antwort des Singletons kreuzen, um anderen Leuten zu helfen ... Es enthält eine korrekte Antwort auf Ihre Frage. –