我有一个带有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; }
}
}
我在InitializeSimpleMembershipAttribute.cs
中有以下设置WebSecurity.InitializeDatabaseConnection("MyCommonContext", "People", "Id", "Uid", autoCreateTables: true);
这似乎有效,如果我没有在带有鉴别器的桌子上。但我认为以上是这个想法,所以你可以使用包含其他数据的表格。
有两种方式可以查看我的问题。 1.当我尝试从AccountController创建用户时,我在上面的设置中得到以下内容:
Cannot insert the value NULL into column 'Discriminator', table 'dbo.People'; column does not allow nulls. INSERT fails.
我该如何解决?
答案 0 :(得分:1)
这是很久以前的事了,但我刚遇到这个问题,我有一个解决方案,即使我讨厌它。为什么它不起作用是迟钝的。
您仍然可以使用WebSecurity.CreateUserAndAccount(model.UserName,model.Password),但可以自行添加Discrimator。
WebSecurity.CreateUserAndAccount(model.UserName,model.Password,new {Discrimator =“Person”});
答案 1 :(得分:0)
j_walker_dev说什么工作正常,但是,我不确定它是多么正确。
除此之外,如果您使用它;然后你可以使用&#34; is&#34;来检索这些类型。关键字。
e.g。
var people = (from p in context.UserProfiles where p is Person select p).ToList();
EF根据鉴别器名称知道哪些用户属于Person类型。
可爱的东西。
答案 2 :(得分:-1)
我遇到同样的问题&amp;我这样解决:
像这样:请使用WebSecurity.CreateAccount代替 WebSecurity.CreateUserAndAccount(model.UserName,model.Password);
我个案中的人不是抽象的。
Person p = new Person();
p.UserName = model.UserName;
((PeronRepository)repository).Add(p);
((PerssonRepository)repository).Save(p);
WebSecurity.CreateAccount(model.UserName, model.Password);
由于 Fawzy Malash