尝试种子数据库

时间:2015-10-08 21:36:54

标签: asp.net-mvc entity-framework datetime sql-server-2012 asp.net-identity-2

我得到了着名的

  

将datetime2数据类型转换为日期时间数据类型   导致了超出范围的价值。

尝试为数据库设定种子时,在manager.Create(role);处出现

异常。无论我使用Db初始化程序类还是迁移种子数据库,都会发生这种情况。

if (!context.Roles.Any(r => r.Name == "AppAdmin"))
        {
            using (var store = new RoleStore<IdentityRole>(context))
            using (var manager = new RoleManager<IdentityRole>(store))
            {
                var role = new IdentityRole { Name = "AppAdmin" };

                manager.Create(role);
            }
        }
        if (!context.Users.Any(u => u.UserName == "SampleUser"))
        {
            using( var store = new UserStore<ApplicationUser>(context) )
            using (var manager = new UserManager<ApplicationUser>(store))
            {
                var user = new ApplicationUser { UserName = "SampleUser", PhoneNumber = "0797697898", Email = "adr@gmail.com" };

                manager.Create(user, "ChangeItAsap!");
                manager.AddToRole(user.Id, "AppAdmin");
            }

我知道问题是SQL Server datetime不能包含默认(DateTime)值,因为它只能在1753/1/1之后保存日期但我无法控制Identity Framework内部因此我无法添加其他属性有问题的属性将它们变为datetime2。另外,我可能不想事件,我只想在我的数据库中创建一些初始用户和角色。

在检查Db架构之后,我看到在AspNetUsers中使用的唯一日期是LockoutEndDateUtc,但是(正如我之前提到的),即使我尝试添加任何用户,也会发生异常!

有什么建议吗?

(SQL Server 2012,asp-mvc-5-2-2,entity-framework-6-1-3,identity-framework 2-1,Visual Studio 2013)

1 个答案:

答案 0 :(得分:0)

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
        base.OnModelCreating(modelBuilder);
    }

帮助但这不是我正在寻找的解决方案......