當我調用SaveChanges時,在對象上下文中有一些未決的更改。在那裏有一個實體值太長的列。這導致SqlException:字符串或二進制數據將被截斷。如何確定哪個實體在SaveChanges上失敗
問題是如何確定有問題的實體/列?
當我調用SaveChanges時,在對象上下文中有一些未決的更改。在那裏有一個實體值太長的列。這導致SqlException:字符串或二進制數據將被截斷。如何確定哪個實體在SaveChanges上失敗
問題是如何確定有問題的實體/列?
你可以考慮使用DataAnnotations和構建你的好友類進行驗證。然後,如果數據不正確,則會向用戶顯示友好的驗證錯誤。
Imports System.ComponentModel.DataAnnotations
Namespace Domain
#Region "Validation"
<MetadataType(GetType(UserMetaData))> _
Partial Public Class User
End Class
''' <summary>
''' Validation for all User data.
''' </summary>
''' <remarks>All validation is done at the Service Layer</remarks>
Public Class UserMetaData
<DisplayName("name")> _
<Required(ErrorMessage:="Username is required.")> _
<StringLength(30, ErrorMessage:="Username cannot exceed 30 characters.")> _
<RegularExpression("^\w{3,30}$", ErrorMessage:="Not a valid username.")> _
Public Property UserName As String
<DisplayName("email")> _
<StringLength(50, ErrorMessage:="Email Address cannot exceed 50 characters.")> _
<RegularExpression("^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$", ErrorMessage:="Not a valid email address.")> _
Public Property Email As String
<DisplayName("website")> _
<StringLength(256, ErrorMessage:="Web Address cannot exceed 256 characters.")> _
<RegularExpression("^http(s?)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$", ErrorMessage:="Not a valid website address.")> _
Public Property WebSite As String
<DisplayName("about")> _
<StringLength(2000, ErrorMessage:="Profile cannot exceed 2000 characters.")> _
Public Property About As String
<DisplayName("region")> _
<Required(ErrorMessage:="Region is required.")> _
Public Property UserRegion As Integer
<DisplayName("birthdate")> _
<DisplayFormat(ApplyFormatInEditMode:=True, ConvertEmptyStringToNull:=True, DataFormatString:="{0:MM/dd/yyyy}")> _
Public Property BirthDate As DateTime
End Class
#End Region
End Namespace
更多引用
http://adventuresdotnet.blogspot.com/2009/08/aspnet-webforms-validation-with-data.html
http://blogs.msdn.com/b/jimoneil/archive/2008/07/08/dynamic-data-annotations.aspx
http://www.ipreferjim.com/site/2010/05/system-componentmodel-dataannotations-for-asp-net-web-forms/
您的滑稽 - 認真,我需要能夠告訴用戶,修復域x,因爲它太長。我可能是錯誤的,但是閃過一條消息,比如「出錯了,因爲你的數據,請啓動SQL Profiler並自己搞清楚」,可能不會與用戶一起飛。 – 2010-08-12 20:53:05
雖然很短,但Dave的答案並非「錯誤」......您並未指定您需要向用戶顯示錯誤......您指定了您需要查明哪裏出了問題。 SQL Profiler會告訴你這些信息。使用Buddy Classes的DataAnnotations可以幫助您爲用戶執行驗證。查看下面的答案。 – 2010-08-12 23:12:09
的確,我誤解了這是一個驗證問題。應在前端進行驗證以防止出現此錯誤。每個具有長度限制的屬性都應該註釋,以便在值無效時進行通知。 – 2010-08-13 14:25:13