3

大きなユーザーテーブル(高度なユーザープロファイル)を作成し、データベースコンテキストにユーザーのデータを保存したいと思います。したがって、プロジェクトで2つのDbContextを使用したくありません。ユーザーがサイトに登録すると、データ(ユーザー名、パスワードなど)に自分のユーザーテーブルが保存されます。私のクラスは次のようなものです。

public class ModelBase
    {
        public int Id { get; set; }
        public DateTime CreateDate { get; set; }
        public DateTime LastUpdateDate { get; set; }
    }

public class User : ModelBase
    {
        public string UserName { get; set; }
        public string Password{ get; set; }
        public string FullName { get; set; }
        public string Email { get; set; }
        public DateTime BirthDate { get; set; }
        public string Specialty { get; set; }
    }

public class News : ModelBase
    {
            public int UserId { get; set; }
            public string Title { get; set; }
            ...
    }

    ....

コンテキストはそうです:

public class MyDBContext : DbContext
    {
        public MyDBContext()
        {
            Database.SetInitializer<MyDBContext>(new MyDBContextInitializer());
        }

        public DbSet<User> UserSet { get; set; }
        public DbSet<News> NewsSet { get; set; }
        public DbSet<Project> ProjectSet { get; set; }
        public DbSet<Section> SectionSet { get; set; }
        ....
    }

    class MyDBContextInitializer : DropCreateDatabaseIfModelChanges<MyDBContext>
        {
            protected override void Seed(MyDBContext context)
            {
                base.Seed(context);
            }
        }

DbContext名を私のものに置き換え、デフォルトの SimpleMembershipInitializerクラスの接続名を次のように変更しました。

  ....
     Database.SetInitializer<MyDBContext>(null);

                try
                {
                    using (var context = new MyDBContext())
                    {
                        if (!context.Database.Exists())
                        {
                            // Create the SimpleMembership database without Entity Framework migration schema
                            ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                        }
                    }

                    WebSecurity.InitializeDatabaseConnection("MyDBContextConnection", "User", "Id", "UserName", autoCreateTables: true);
    ....

最後に 、ユーザークラスに適したRegisterModelWebSecurity.CreateUserAndAccount()を変更しました。しかし、それは機能しません。 自分のユーザーテーブルを使用してサイトに登録するにはどうすればよいですか?

4

1 に答える 1

1

Asp.net メンバーシップと複雑なクラスを一緒に接続できます。このアプローチでは、asp.net メンバーシップがはるかに堅牢であるため (ロールとユーザーの管理について考える必要がないため)、時間を大幅に節約できます。また、このような既存のオープン ソース プロジェクトを利用して、最小限の労力でプロジェクトを作成します。次に、クラスは次のような構造になります。

public class CustomUserDetail : ModelBase
    {
        public string UserName { get; set; } // what you really need is this to be unique for each user in you data base
        // public string Password{ get; set; } handled by asp.net Membership
        public string FullName { get; set; }
        // public string Email { get; set; } handled by asp.net Membership
        public DateTime BirthDate { get; set; }
        public string Specialty { get; set; }
    }

次に、次のようにIPrincipalに拡張メソッドを追加できます。

public static CustomUserDetail CustomUserDetail (this IPrincipal principal)
        {
            var repository = new  YourUserDetailRepository();
            return repository.GetCurrentUserDetail();
        }

コードで簡単に使用できます

<p> @User.CustomUserDetail.FullName  </p>
于 2012-12-04T07:54:30.310 に答える