2010-04-15 16 views
1

Je lis cette question ici:LINQtoSQL Custom Constructor désactivé Classe partielle?

Is there a way to override the empty constructor in a class generated by LINQtoSQL?

Généralement mon constructeur ressemblerait à ceci:

public User(String username, String password, String email, DateTime birthday, Char gender) 
    { 
     this.Id = Guid.NewGuid(); 
     this.DateCreated = this.DateModified = DateTime.Now; 
     this.Username = username; 
     this.Password = password; 
     this.Email = email; 
     this.Birthday = birthday; 
     this.Gender = gender; 
    } 

Cependant, comme lu dans cette question, vous voulez utiliser la méthode partielle OnCreated() au lieu de affecter des valeurs et ne pas écraser le constructeur par défaut. Ok, alors je suis ceci:

partial void OnCreated() 
{  
     this.Id = Guid.NewGuid(); 
     this.DateCreated = this.DateModified = DateTime.Now; 
     this.Username = username; 
     this.Password = password; 
     this.Email = email; 
     this.Birthday = birthday; 
     this.Gender = gender; 
} 

Cependant, cela me donne deux erreurs:

Partial Methods must be declared private. 
Partial Methods must have empty method bodies. 

bien Je change à Private Sub OnCreated() de supprimer ces deux erreurs. Cependant, je suis toujours coincé avec ... comment puis-je lui transmettre des valeurs comme je le ferais avec un constructeur personnalisé normal? Aussi je fais cela en VB (converti puisque je connais le plus/préfère C#), donc cela aurait-il un effet sur ça?

Répondre

1

Vous ne pouvez pas passer des valeurs dans OnCreated. La question à laquelle vous vous êtes connecté concerne le remplacement du comportement du constructeur par défaut. On dirait que vous voulez utiliser un constructeur paramétrées comme ceci:

Public Sub New(username as String, password as String, email as String, birthday as DateTime, gender as Char) 
    User.New() 

    Me.Id = Guid.NewGuid() 
    Me.DateCreated = this.DateModified = DateTime.Now 
    Me.Username = username 
    Me.Password = password 
    Me.Email = email 
    Me.Birthday = birthday 
    Me.Gender = gender 
End Sub 

Voulez-vous créer de nouveaux utilisateurs comme ceci:

Dim u as User = new User() 

ou comme ceci:

Dim u as User = new User("Name", "Password", "Email", etc) 
+0

Ah okay je n'ai pas pensé à ce User.New(), j'ai essayé juste de faire mon propre constructeur mais quand j'ai essayé de sauver cet objet il a échoué parce qu'il ne contenait pas beaucoup de choses que la classe générée automatiquement besoins que le constructeur par défaut fournit. Merci! – SventoryMang

+1

Je voulais juste ajouter que 'User.New()' ne fonctionne pas, vous obtenez l'erreur suivante: L'appel du constructeur n'est valide que comme la première instruction dans un constructeur d'instance'. Au lieu de cela, ce qui semble fonctionner est 'Me.New()' – SventoryMang

+0

Désolé - je ne connais pas très bien VB. J'espère que vous êtes arrivé à Me.New() assez rapidement. –

0

Lorsque vous utilisez VB, vous ne devriez pas marquer la mise en œuvre Partial mais simplement comme Private. Regardez l'exemple suivant:

Private Sub OnCreated() 
    ' Your code here' 
End Sub 
+0

Ouais, je J'ai commenté que dans le post, cela ne résout pas ce que j'essaie d'accomplir et que cela passe dans une certaine valeur dans OnCreated comme je le ferais dans un constructeur personnalisé typique. – SventoryMang