UserProfileテーブルへのカスタムデータの追加に関するこの優れたブログを読んだ後、UserProfileテーブルがデフォルトデータとすべての追加情報が格納される別のクラスを格納する方法を変更したいと思いました。
Interenetアプリケーションテンプレートを使用して新しいプロジェクトを作成した後、2つのクラスを作成しました。
Student.cs
[Table("Student")]
public class Student
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public virtual int StudentId { get; set; }
public virtual string Name { get; set; }
public virtual string Surname { get; set; }
public virtual int UserId { get; set; }
}
UserProfile.cs
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual int StudentId { get; set; }
public virtual Student Student { get; set; }
}
また、AccountModel.csからUserProfile定義を削除しました。私のDBコンテキストクラスは次のようになります。
MvcLoginDb.cs
public class MvcLoginDb : DbContext
{
public MvcLoginDb()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Student> Students { get; set; }
}
繰り返しになりますが、AccountModel.csからdbコンテキスト定義を削除しました。
私が書いたパッケージ-マネージャー-コンソールの内部:
Enable-Migrations
私のConfiguration.csは次のようになります。
internal sealed class Configuration : DbMigrationsConfiguration<MvcLogin.Models.MvcLoginDb>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(MvcLogin.Models.MvcLoginDb context)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
if (!WebSecurity.UserExists("banana"))
WebSecurity.CreateUserAndAccount(
"banana",
"password",
new
{
Student = new Student { Name = "Asdf", Surname = "Ggjk" }
});
}
}
これは、新しいクラスを作成するときに学生データを追加するというアイデアでしたが、 Update-Database -Verboseを実行した後、エラーが発生する ため、このアプローチは機能しません:オブジェクトタイプMvcLogin.Models.Studentから既知の管理対象へのマッピングが存在しませんプロバイダーのネイティブタイプ。
このエラーが発生する理由を誰かが説明できますか?別のテーブルに追加のデータを格納するために別のアプローチを使用する必要がありますか?