1

Person オブジェクトを含むクラス ライブラリがあり、そこから継承する他の 2 つの型もあります。私は当初、これを使用して個人の aspnetdb プロパティを拡張していましたが、SimpleMembership セキュリティに遭遇し、それ以来それを機能させようとしています。

{
    public abstract class Person
    {
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// eg. AB123
        /// </summary>
        public string Uid { get; set; }
        public bool? IsRepresrentative { get; set; }
        [Display(Name = "First Name")]
        public string FirstName { get; set; }
        [Display(Name = "Preferred First Name")]
        public string FirstNamePreferred { get; set; }
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [Display(Name = "Full Name")]
        public string FullName { get; set; }
        public string Email { get; set; }
        public string EmailAdditional { get; set; }
        public string Telephone { get; set; }
        [Display(Name = "Job Title")]
        public string JobTitle { get; set; }
        public string PersonalPage { get; set; }
        public string ServiceArea { get; set; }

        //Profile items
        public int? PrefNewsItemsToShow { get; set; }

        public override string ToString()
        {
            return FullName ??
                   string.Format("{0} {1}", string.IsNullOrEmpty(FirstNamePreferred) ? FirstName : FirstNamePreferred, LastName);
        }
    }

    public class ProviderUser : Person
    {
        public ICollection<Provider> Providers { get; set; }
    }

    public class SchoolUser : Person
    {
        public ICollection<School> Schools { get; set; }
    }

}

私は InitializeSimpleMembershipAttribute.cs に次のセットを持っています

WebSecurity.InitializeDatabaseConnection("MyCommonContext", "People", "Id", "Uid", autoCreateTables: true);

弁別器のあるテーブルにそれがない場合、これはうまくいくようです。しかし、他のデータも含むテーブルを使用できるように、上記がアイデアだと思いました。

私の質問を見るには2つの方法があります。1. AccountController からユーザーを作成しようとすると、上記のセットアップで次のようになります。

Cannot insert the value NULL into column 'Discriminator', table 'dbo.People'; column does not allow nulls. INSERT fails.

どうすれば解決できますか?

  1. または、別の見方をすると、どうすれば自分がやりたいことを別の/より良い方法で行うことができますか?
4

3 に答える 3

1

これはずっと前のことですが、私はちょうどこの問題を抱えていました。私はそれが嫌いですが、解決策があります。なぜそれがうまくいかないのかは遅れています。

WebSecurity.CreateUserAndAccount(model.UserName, model.Password) は引き続き使用できますが、Discrimator を自分で追加してください。

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Discrimator = "Person" });

于 2013-11-13T18:45:39.290 に答える
0

j_walker_dev が言ったことはうまくいきますが、それがどれほど正しいかはわかりません。

これに加えて、それを使用する場合; その後、「is」キーワードを使用してそれらのタイプを取得できます。

例えば

var people = (from p in context.UserProfiles where p is Person select p).ToList();

EF は、識別子名に基づいて、どのユーザーが Person 型であるかを認識します。

素敵なもの。

于 2015-03-31T16:31:10.710 に答える
-1

私は同じ問題を抱えています & 私はこのように解決します:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password); の代わりに WebSecurity.CreateAccount を使用してください。

このような:

私の場合、人は抽象的ではありません。

Person p = new Person();
p.UserName = model.UserName;
((PeronRepository)repository).Add(p);
((PerssonRepository)repository).Save(p);
WebSecurity.CreateAccount(model.UserName, model.Password);

ありがとう

于 2013-05-21T13:10:35.260 に答える