具有 TPH 鉴别器列的表上的简单成员资格

本文关键字:简单 成员 鉴别 具有 TPH | 更新日期: 2023-09-27 17:56:53

我有一个带有 Person 对象的类库,它还有另外两种类型继承自它。 我最初使用它来扩展一个人的 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; }
    }
}

我在初始化简单成员属性中设置了以下设置.cs

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

这似乎有效,如果我没有把它放在带有鉴别器的桌子上。 但我认为以上就是这个想法,这样您就可以使用也包含其他数据的表。

有两种

方式来看待我的问题。1.当它尝试从帐户控制器创建用户时,我通过上述设置得到以下结果:

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

我该如何解决这个问题?

  1. 或者另一种看待它的方式,是我如何以不同/更好的方式做我想做的事?

具有 TPH 鉴别器列的表上的简单成员资格

这是很久以前的事了,但我只是遇到了这个问题,我有一个解决方案,即使我讨厌它。为什么它不仅有效是迟钝的。

您仍然可以使用 WebSecurity.CreateUserAndAccount(model.用户名、型号。密码),但添加鉴别器你自己。

WebSecurity.CreateUserAndAccount(model.用户名、型号。密码,新 { 鉴别器 = "人" });

j_walker_dev所说的效果很好,但是,我不确定它是否正确。

除此之外,如果你使用它;然后你可以使用"is"关键字检索这些类型。

例如

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

EF 根据鉴别器名称知道哪些用户属于"人员"类型。

可爱的东西。

我得到同样的问题,我以这种方式解决它:

请使用 WebSecurity.CreateAccount 代替 WebSecurity.CreateUserAndAccount(model.用户名、型号。密码);

喜欢这个:

就我而言,人不是抽象的。

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

谢谢法兹·马拉什