Tôi đang cố gắng loại trừ ngoại lệ khi tôi chèn một người dùng đã tồn tại với tên người dùng đã cho vào cơ sở dữ liệu của tôi. Như tiêu đề nói sau đó tôi đang sử dụng EF. Ngoại lệ duy nhất được ném khi tôi cố gắng chèn người dùng vào db là một "UpdateException" - Làm thế nào tôi có thể trích xuất ngoại lệ này để xác định xem một ngoại lệ trùng lặp của nó hay cái gì khác?Ngoại lệ khóa trùng lặp từ Khuôn khổ thực thể?
Trả lời
Đặt số chính xác tại ??????
tương ứng với vi phạm ràng buộc duy nhất (Tôi không biết nó từ đầu của tôi).
Perfect :) - Tuy nhiên .. Tôi chỉ cố gắng để nắm bắt các ErrorCode và nó nói rằng mã lỗi cho một mục trùng lặp là-2146232060 mà có vẻ hơi lạ với tôi? – ebb
Lỗi của tôi .. đã sử dụng errorCode thay thế. Cảm ơn :) – ebb
Để tham khảo trong tương lai: [2601] (http://msdn.microsoft.com/en-us/library/aa258747 (v = sql.80) .aspx) là một vi phạm ràng buộc duy nhất (đối với SQL Server). – kamranicus
Bây giờ trong C# 6.0 bạn sẽ có thể làm điều gì đó như thế này:
catch (UpdateException ex) when ((ex.InnerException as SqlException)?.Number == ??????)
{
// Handle exception here
}
Bởi vì tôi đang sử dụng EntityFramework với C#, tôi đã phải thực hiện một thay đổi nhỏ này - hy vọng nó sẽ giúp mọi người .. .
try
{
await db.SaveChangesAsync();
}
catch (DbUpdateException ex)
{
SqlException innerException = ex.InnerException.InnerException as SqlException;
if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
{
//your handling stuff
}
else
{
throw;
}
}
vấn đề của tôi đã về vì tôi cần DbUpdateException thay vì UpdateException, và đối tượng InnerException tôi đã có một đối tượng InnerException bổ sung mà chứa số tôi cần ...
Cảm ơn, điều này rất hữu ích! Tôi sẽ sử dụng điều này, nhưng với một kiểm tra null thêm trên dòng 7; như được viết, khối catch sẽ ném NullReferenceException nếu ex.InnerException (tức là InnerException lồng nhau đầu tiên) là null. –
Tôi nghĩ rằng nó tốt hơn nếu bạn ngăn chặn ngoại lệ xảy ra. Nếu có thể với mã của bạn, tôi sẽ làm như sau:
Khi sử dụng khung thực thể, điều tốt nhất cần làm là trước tiên hãy thử và nhận được mục nhập sẽ gây ra rắc rối cho bạn với SingleUnDefault của LINQ. Bây giờ bạn có thể cập nhật thực thể đã nhận với cá thể mà bạn muốn chèn, giữ cho bạn một số ID với tự động tăng nếu bạn sử dụng nó. Nếu SingleOrDefault là null, bạn có thể thêm thực thể của mình một cách an toàn.
ví dụ về mã:
public override void AddOrUpdate(CustomCaseSearchCriteria entity)
{
var duplicateEntityCheck = GetSingleByUniqueConstraint(entity.UserCode, entity.FilterName);
if (duplicateEntityCheck != null)
{
duplicateEntityCheck.Overwrite(entity);
base.Update(duplicateEntityCheck);
}
else
base.Add(entity);
}
public virtual CustomCaseSearchCriteria GetSingleByUniqueConstraint(string userCode, string filterName)
{
return GetAllInternal().SingleOrDefault(sc => sc.UserCode == userCode && sc.FilterName == filterName);
}
- 1. Khuôn khổ thực thể: Tránh chèn trùng lặp
- 2. Mã khuôn khổ thực thể Đầu tiên Nhiều người tạo nhiều hàng trùng lặp
- 3. Khuôn khổ thực thể. Xem bản ghi trùng lặp trả về
- 4. Khuôn khổ thực thể Chèn Nhiều người tạo nhiều dữ liệu trùng lặp
- 5. Khuôn khổ thực thể 4 - Thừa kế
- 6. Từ khóa ảo nào có trên thuộc tính thực thể trong Khuôn khổ thực thể 5?
- 7. Khuôn khổ thực thể UnintentionalCodeFirstException
- 8. Khuôn khổ thực thể PostgreSQL
- 9. Mã khuôn khổ thực thể Đầu tiên ReadOnly Thực thể
- 10. Ngoại lệ trên BitmapFrame.Create (lỗi trong khuôn khổ WPF?)
- 11. Khuôn khổ thực thể - cách phát hiện ngoại lệ có thể khôi phục và không thể khôi phục
- 12. Khuôn khổ thực thể - Chọn riêng trong
- 13. Khuôn khổ thực thể có mã MVC
- 14. Khuôn khổ thực thể và SQL Server Từ đồng nghĩa
- 15. Khuôn khổ thực thể 4.1 Cột ma
- 16. Khuôn khổ thực thể có nhiều edmx
- 17. thực thể khuôn khổ: điều kiện lọc
- 18. Khuôn khổ thực thể và đa luồng
- 19. Khuôn khổ thực thể và MongoDb
- 20. Khuôn khổ thực thể trên xóa tầng
- 21. Khuôn khổ thực thể và CẬP NHẬT CASCADE
- 22. Khuôn khổ thực thể; Làm thế nào để xử lý một ngoại lệ trong vòng lặp foreach và tiếp tục lặp lại
- 23. Khuôn khổ thực thể 4.3. Tên cột không hợp lệ 'CreatedOn'
- 24. Khuôn khổ thực thể 5 InvalidOperationException trên Tải lại
- 25. Khuôn khổ thực thể thay vì kích hoạt
- 26. Khuôn khổ thực thể, POCO và thuộc tính riêng
- 27. Khuôn khổ thực thể và bản ghi bị xóa mềm
- 28. Khuôn khổ thực thể: Cách xử lý đúng các ngoại lệ xảy ra do các ràng buộc SQL
- 29. Làm thế nào để WillCascadeOnDelete trong khuôn khổ thực thể làm việc?
- 30. Khuôn khổ thực thể Khoá ngoại được chèn với Auto-Id
như với bất kỳ ngoại lệ, nhìn vào InnerException để tìm hiểu các chi tiết lỗi chính xác. – RPM1984