【发布时间】:2015-10-19 20:51:32
【问题描述】:
我最近刚刚发布了一个关于adding properties to ApplicationUsers 的问题,现在这个问题来自于:
所以现在ApplicationUser 的FirstName 和LastName 属性是AspNetUsers 表中的字段。但是当我去注册为新用户时,我得到了这个错误:
System.Data.SqlClient.SqlException:无法将值 NULL 插入 列“姓氏”,表 'aspnet-CustomUserProps-20151019035309.dbo.AspNetUsers';列确实 不允许空值。插入失败。
这是我在AccountController的注册帖:
Public Async Function Register(model As RegisterViewModel) As Task(Of ActionResult)
If ModelState.IsValid Then
Dim user = New ApplicationUser() With {
.UserName = model.Email,
.Email = model.Email,
.FirstName = model.FirstName,
.LastName = model.LastName
}
Dim result = Await UserManager.CreateAsync(user, model.Password)
用户 DO 的 FirstName 和 LastName 属性包含预期值,但此错误发生在“Dim result =...”行。
我在注册视图中添加了名字和姓氏字段,如下所示:
<div class="form-group">
@Html.LabelFor(Function(m) m.Email, New With {.class = "col-md-2 control-label"})
<div class="col-md-10">
@Html.TextBoxFor(Function(m) m.Email, New With {.class = "form-control"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(Function(m) m.FirstName, New With {.class = "col-md-2 control-label"})
<div class="col-md-10">
@Html.TextBoxFor(Function(m) m.FirstName, New With {.class = "form-control"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(Function(m) m.LastName, New With {.class = "col-md-2 control-label"})
<div class="col-md-10">
@Html.TextBoxFor(Function(m) m.LastName, New With {.class = "form-control"})
</div>
</div>
然后像这样注册视图模型:
<Required>
<Display(Name:="First Name")>
Public Property FirstName As String
<Required>
<Display(Name:="Last Name")>
Public Property LastName As String
我还缺少什么?
这是堆栈跟踪的顶部(最后)几行,如果有帮助的话:
[SqlException (0x80131904): 无法将值 NULL 插入列 '姓氏',表 'aspnet-CustomUserProps-20151019035309.dbo.AspNetUsers';列确实 不允许空值。插入失败。声明已终止。]
System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, 布尔型 breakConnection,Action'1 wrapCloseInAction) +1787814
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection,Action'1 wrapCloseInAction) +5341674 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +546
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) +1693
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,字符串 resetOptionsString) +275
System.Data.SqlClient.SqlCommand.CompleteAsyncExecuteReader() +220
System.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult 异步结果)+738
System.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult) +147
【问题讨论】:
-
很奇怪。调试时看到
LastName的值了吗? -
@A.BurakErbora - 是的。如果我在此处设置一个停止点,调试窗口会显示我在该页面上输入的 FirstName 和 LastName 的值。
-
我能想到的唯一可能与此有关的事情是,我必须手动将 FirstName 和 LastName 字段添加到迁移中 AspNetUsers 表的 Up 函数中。也许因为它没有自动将它们放入其他地方,所以缺少这些??
标签: asp.net-mvc vb.net entity-framework asp.net-identity