views:

175

answers:

1

Hi

I have asp.net membership and I use the built in Create user method since it is convenient now after this depending on the user I want to add 2 more fields to the aspnet_UserTable.

In my aspnet_user Table I have like this

// All Standard Fields that come with this table
ClubID<nullable)
ClubName <nullable)

I have a table that relates this

Club Table

ClubID<PK>
ClubName

So this relationship forms that one club can have many users. But one user can only have 1 club.

So now I been trying to figure out how to add the ClubID to the aspnet Usertable since it does not show up in the Entity Framework Diagram since it does not show FK.

// Note in this case I am just using EF made to create but in reality I will use the Membership.Create. 
aspnet_Users test = aspnet_Users.Createaspnet_Users(Guid.NewGuid(), Guid.NewGuid(), "myTest5", "mytest5", false, DateTime.Now);

            test.Club = Club.CreateClub("One224", "Two224");
            test.ClubName = "go";

            MyEntities.AddToaspnet_Users(test);

            MyrEntities.SaveChanges();

So what I have works but it just makes no sense and I hope there is a better way. Like I try to create the club and then stick it in the test.club.

This add's the ClubID primary key but does not add the clubName.

So then I have to add the club name separately. Like why? Is there not a better way?

I also prefer linq method syntax so if it is needed and you know this syntax can you please write it in that.

+3  A: 

I would recommend a few things.

One: Strongly consider not adding columns to the aspnet_* tables. If you ever want to change your authentication method down the road you'll be stuck lugging those tables around with you even though you won't need them anymore. Also, there may be a new, better version of the membership provider one day that you won't be able to upgrade because you have customized the membership schema.

Two: Instead, why not create a new table called User (or something of your liking) that has your own primary key but links back to the ASP.NET Membership unique key (the guid).

Your table might look like

User UserId (PK) AuthenticationUserId (FK back to aspnet_User table) ClubId (FK back to your club table)

Three: I don't understand why you've repeated ClubName both in your user table and in your Club table. You really only need to define the ClubName once, right? Keep your Club table how it is but remove the ClubName column from the user table.

Your code above for associating the club with the user is correct and works because that's how the Entity Framework works. You're associating entities with each other and are abstracted from some of the relational aspects of your data schema. It's a little strange to get used to it first but it does work.

thinkzig
Ya I think I will redsign that so put a relationship by using UserID and getting those 2 fields out of the table. I guess my thinking at the time was that then I don't have to start looking around other tables to find what I want. Since certain users when they are made I need the ClubName and UserName since how I want it in my DB is taht if you have ClubName = "A" UserName = "bob" and ClubName = "B" UserName = "bob" these should be treated as to separate users.
chobo2
so now it is Club table has ClubName,ClubID and UserID but I still need to get the userID show how in this club table yet I still can't add it.
chobo2
I would strongly support this recommendation - do not modify the aspnet_users table, extend it! With EF, you can easily create nice object models in your code from those tables in the database
marc_s