Entity Framework 6, MVC5, ASP Identity 2.0.MVC5 EF6 Метод семян: не может вставить NULL в таблицу «Id» AspNetUsers
Я следовал за это 2 обучающие программы, чтобы создать регистрационную часть веб-приложения: part 1 - part 2
Я создал свой собственный класс AppUser из IdentityUser класса в другом проекте библиотеки. У меня также есть контекст данных от IdentityDbContext
public class DataContext: IdentityDbContext<AppUser>
{
public DataContext(): base("DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AppUser>().Property(u => u.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
base.OnModelCreating(modelBuilder);
}
}
public class AppUser : IdentityUser
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public override string Id { get; set; }
[Required]
[Display(Name ="First Name")]
[MaxLength(100)]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
[MaxLength(100)]
public string LastName { get; set; }
[MaxLength(100)]
public string Title { get; set; }
[Required(ErrorMessage = "Email is required.")]
[Display(Description = "Email")]
public override string Email { get; set; }
[MaxLength(20)]
public string Phone { get; set; }
[Range(0,9999)]
[Display(Name = "Extension")]
public int PhoneExtension { get; set; }
[Display(Name = "Active")]
[DefaultValue(true)]
public bool IsActive { get; set; }
}
Когда я запускаю метод семян я получаю следующую ошибку
System.Data.SqlClient.SqlException: Невозможно вставить значение NULL в столбец «Id ', таблица' CRM1.dbo.AspNetUsers '; столбец не допускает нулей. INSERT терпит неудачу. Заявление было прекращено.
Вот метод высева:
protected override void Seed(CRM.DAL.Data.DataContext context)
{
context.AccessLevels.AddOrUpdate(al => al.Label,
new Model.AccessLevel { AccessLevelID = 1, Label = "Admin", Description = "Full access to the CRM data" },
new Model.AccessLevel { AccessLevelID = 2, Label = "Customer Service", Description = "Full access to the CRM data" },
new Model.AccessLevel { AccessLevelID = 3, Label = "Sales", Description = "Full access to the CRM data" }
);
if (!(context.Users.Any(u => u.UserName == "[email protected]")))
{
var userStore = new UserStore<AppUser>(context);
var userManager = new UserManager<AppUser>(userStore);
var userToInsert = new AppUser
{
Id = "1",
FirstName = "Admin",
LastName = "Admin",
Title = "Administrator",
Email = "[email protected]",
PhoneExtension = 0,
IsActive = true,
AccessLevelID = 1,
EmailConfirmed = true,
PhoneNumberConfirmed = true,
TwoFactorEnabled = false,
LockoutEnabled = false,
AccessFailedCount = 0,
UserName = "admin"
};
userManager.Create(userToInsert, "password");
}
}
Так Id получает значение, но EF говорит он вставляет NULL. Я пытался, не придавая значения Id мышлению, EF будет делать это автоматически, но нет.
Каков подход к посещению AspNetUser с моим контекстом? Я видел разные учебники, но это не относится к моему расширенному классу AppUser и DataContext.
Спасибо
Попробуйте изменить тип Id в целое и посмотреть, что происходит –
Можете ли вы подтвердить, что 'столбец Id' был создан в качестве столбца идентификации? – markpsmith
@kkkkk Изменение идентификатора в int говорит о том, что он не соответствует типу наследуемого идентификатора от IdentityUser – Greg