具有 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.
我该如何解决这个问题?
- 或者另一种看待它的方式,是我如何以不同/更好的方式做我想做的事?
这是很久以前的事了,但我只是遇到了这个问题,我有一个解决方案,即使我讨厌它。为什么它不仅有效是迟钝的。
您仍然可以使用 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);
谢谢法兹·马拉什