После прочтения этого хорошего -properties/" rel="nofollow">БЛОГ о добавлении пользовательских данных в таблицу UserProfile, я хотел изменить его так, чтобы таблица UserProfile хранила данные по умолчанию + другой класс, в котором хранится вся дополнительная информация.
После создания нового проекта с использованием шаблона приложения Interenet я создал два класса:
Студент.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; }
}
Кроме того, я удалил определение UserProfile из AccountModel.cs. Мой класс контекста БД выглядит так:
MvcLoginDb.cs
public class MvcLoginDb : DbContext
{
public MvcLoginDb()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Student> Students { get; set; }
}
опять же, я удалил определение контекста БД из AccountModel.cs.
Внутри Package-Manager-Console я написал:
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 я получаю сообщение об ошибке: < strong>Не существует сопоставления типа объекта MvcLogin.Models.Student с собственным типом известного управляемого поставщика.
Может ли кто-нибудь объяснить, почему я получаю эту ошибку, следует ли использовать другой подход для хранения дополнительных данных в другой таблице?