views:

59

answers:

2

Hi all,

I read this question here:

http://stackoverflow.com/questions/82409/is-there-a-way-to-override-the-empty-constructor-in-a-class-generated-by-linqtosq

Typically my constructor would look like:

 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;
    }

However, as read in that question, you want to use partial method OnCreated() instead to assign values and not overwrite the default constructor. Okay so I got this :

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;
}

However, this gives me two errors:

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

Alright I change it to Private Sub OnCreated() to remove both of those errors. However I am still stuck with...how can I pass it values as I would with a normal custom constructor? Also I am doing this in VB (converted it since I know most know/prefer C#), so would that have an affect on this?

A: 

When using VB, you shouldn't mark the implementation as Partial but simply as Private. Look at the following example:

Private Sub OnCreated()
    ' Your code here'
End Sub
Steven
Yeah, I commented on that in the post, that doesn't solve what I am trying to accomplish though and that is pass in some value into OnCreated like I would in a typical custom constructor.
sah302
+1  A: 

You can't pass values into OnCreated. The question you linked to is concerned with overriding the the behavour of the default constructor. It sounds like you want to use a parameterised constructor like this:

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

Do you want to create new users like this:

 Dim u as User = new User()

or like this:

 Dim u as User = new User("Name", "Password", "Email", etc)
Alex Peck
Ah okay I didn't think of that User.New(), I tried just making my own constructor but then when I tried to save that object it failed because it didn't contain a lot of the stuff that the auto generated class needs that the default constructor provides. Thanks!
sah302
I just wanted to add that `User.New()` does not work you get the following error: Constructor call is valid only as the first statement in an instance constructor`. Instead what seems to work is `Me.New()`
sah302
Sorry - I don't really know VB very well. Hopefully you got to Me.New() fairly quickly.
Alex Peck