私は大学生向けの簡単なアプリケーションを作成しています。このタイプのリクエストでは、特定の専門職の従業員によって処理されます。ASP.NET MVC5のApplicationUserクラスをさらに拡張するIDシステム
私はデフォルトのMVC5アイデンティティシステムを使い、TPHパターンを使ってApplicationUserクラスを拡張したいと思います。だから私はApplicationUserに共通のプロパティを追加しました:
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Email { get; set; }
}
を、私はApplicationUserを継承する二つのクラスを作成しました:私は現在、希望するユーザーの両方のタイプがベースのアイデンティティとして登録することです
public class Student : ApplicationUser
{
public string PersonalNumber { get; set; }
public bool Monitor { get; set; }
public virtual Group Group { get; set; }
public virtual ICollection<Request> Requests { get; set; }
}
public class Employee : ApplicationUser
{
public virtual EmployeeSpeciality EmployeeSpeciality { get; set; }
public virtual ICollection<Request> Requests { get; set; }
}
をinheritance example on asp.net
私が思ったように、AccountControllerでユーザーvarを初期化してから、StudentまたはEmployeeとしてUserManagerに渡すだけで十分です。しかし、私はこの例外を得ている学生として登録しようとした後:
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'PersonalNumber'.
Invalid column name 'Monitor'.
Invalid column name 'EmployeeSpeciality_Id'.
Invalid column name 'Group_Id'.
私のコンテキストクラス:
public class EntityContext : IdentityDbContext
{
public EntityContext()
: base("DbConnection")
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Student> Students { get; set; }
public DbSet<Employee> Employees { get; set; }
...
}
とコントローラのアクションの一部:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new Student()
{
UserName = model.UserName,
FirstName = model.FirstName,
LastName = model.LastName,
Email = model.Email
};
var result = await UserManager.CreateAsync(user, model.Password);
私は設定してみましたApplicationClassを抽象クラスにしますが、運はありません。どんな助けもありがとう。
更新日:問題はコード自体にありませんでした。これらの変更をモデルに加えた後で、データベースを削除(または更新)していないだけです。その後、すべてうまく動作します。
あなたのコメントの後...このことができます
希望:そのような何かを試してみてくださいApでナビゲーションプロパティを持つそれらの両方のためのplicationUser)、それは学生と従業員のDBSetを削除しなくても機能します。実際の問題はちょっとばかげていました。マイグレーションによってDBを削除または更新するのを忘れてしまっただけです。それは、私が知っている顔の紋章です。とにかくあなたの注意のThx: –
@Dragonheartこれはあなたの問題を解決した場合は、答えとして投稿し、将来の読者の利益のためにそれを受け入れてください。ありがとう。 –