Entity Framework : 如何捕获 Not Null 错误
Entity Framework : how to catch Not Null errors
我正在尝试将数据插入 SQL 服务器 table,它有很多 not null
约束:
CREATE TABLE [dbo].[Customer]
(
[CustomerId] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](255) NOT NULL,
[LastName] [varchar](255) NOT NULL,
[AddressLine] [varchar](255) NOT NULL,
[City] [varchar](55) NOT NULL,
[StateCode] [varchar](3) NOT NULL,
[ZipCode] [varchar](10) NOT NULL,
CONSTRAINT [PK_Customer]
PRIMARY KEY CLUSTERED ([CustomerId] ASC)
)
EF代码:
public virtual DbSet<Customer> Customer { get; set; }
modelBuilder.Entity<Customer>(entity =>
{
entity.Property(e => e.FirstName)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.LastName)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.AddressLine)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.City)
.HasMaxLength(55)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.StateCode)
.HasMaxLength(3)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.ZipCode)
.HasMaxLength(10)
.IsRequired()
.IsUnicode(false);
});
尝试将数据添加到 table 时,代码缺少列,因此无法插入数据库。不知道这一点,也没有收到 'NOT NULL' 错误,正如我在 SQL 数据库中看到的那样。我如何将 SQL 服务器错误报告回 C# ASP.NET MVC 应用程序? ([Required]
属性将起作用,但我想在 C# 中查看 SQL 服务器错误)
var source = new Customer();
source.FirstName = "Joe";
source.LastName = "Smith"; // missing Address, City, State, Zip, etc
_context.Customer.Add(source);
SQL 服务器中显示的错误:
Cannot insert the value NULL into column 'Last', table 'dbo.Customer'; column does not allow nulls. INSERT fails.
如何在 C# ASP.NET MVC 程序中得到这些错误?
将 [Required] 属性添加到您的 属性。
[Required]
public string FirstName{ get; set; }
然后,如果您尝试在不为 FirstName 属性 赋值的情况下保存 Customer,则 EF 将抛出 System.Data.Entity.Validation.DbEntityValidationException 异常
try
{
_context.SaveChanges();
}
catch (DbUpdateException e)
{
}
如果您在数据库中的字段不是可空类型(NOT NULL),那么您应该添加 [Required] 属性以确保 entity framework 在向 SQL 服务器发出请求之前检查空值
如果该字段是主键,那么您应该改用 [Key] 属性
看看这个教程here。
我正在尝试将数据插入 SQL 服务器 table,它有很多 not null
约束:
CREATE TABLE [dbo].[Customer]
(
[CustomerId] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](255) NOT NULL,
[LastName] [varchar](255) NOT NULL,
[AddressLine] [varchar](255) NOT NULL,
[City] [varchar](55) NOT NULL,
[StateCode] [varchar](3) NOT NULL,
[ZipCode] [varchar](10) NOT NULL,
CONSTRAINT [PK_Customer]
PRIMARY KEY CLUSTERED ([CustomerId] ASC)
)
EF代码:
public virtual DbSet<Customer> Customer { get; set; }
modelBuilder.Entity<Customer>(entity =>
{
entity.Property(e => e.FirstName)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.LastName)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.AddressLine)
.HasMaxLength(255)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.City)
.HasMaxLength(55)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.StateCode)
.HasMaxLength(3)
.IsRequired()
.IsUnicode(false);
entity.Property(e => e.ZipCode)
.HasMaxLength(10)
.IsRequired()
.IsUnicode(false);
});
尝试将数据添加到 table 时,代码缺少列,因此无法插入数据库。不知道这一点,也没有收到 'NOT NULL' 错误,正如我在 SQL 数据库中看到的那样。我如何将 SQL 服务器错误报告回 C# ASP.NET MVC 应用程序? ([Required]
属性将起作用,但我想在 C# 中查看 SQL 服务器错误)
var source = new Customer();
source.FirstName = "Joe";
source.LastName = "Smith"; // missing Address, City, State, Zip, etc
_context.Customer.Add(source);
SQL 服务器中显示的错误:
Cannot insert the value NULL into column 'Last', table 'dbo.Customer'; column does not allow nulls. INSERT fails.
如何在 C# ASP.NET MVC 程序中得到这些错误?
将 [Required] 属性添加到您的 属性。
[Required]
public string FirstName{ get; set; }
然后,如果您尝试在不为 FirstName 属性 赋值的情况下保存 Customer,则 EF 将抛出 System.Data.Entity.Validation.DbEntityValidationException 异常
try
{
_context.SaveChanges();
}
catch (DbUpdateException e)
{
}
如果您在数据库中的字段不是可空类型(NOT NULL),那么您应该添加 [Required] 属性以确保 entity framework 在向 SQL 服务器发出请求之前检查空值
如果该字段是主键,那么您应该改用 [Key] 属性
看看这个教程here。