Search code examples
.netlinqlinq-to-sqlconstructorpartial-classes

LINQtoSQL Custom Constructor off Partial Class?


I read this question here:

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

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?


Solution

  • 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)