实体框架:如何捕获非空错误

时间:2019-02-18 02:48:12

标签: c# entity-framework .net-core asp.net-core-mvc asp.net-core-2.1

我正在尝试将数据插入具有很多not null约束的SQL Server表中:

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);

  });

尝试向表中添加数据时,代码缺少列,因此无法插入数据库。我对此并不了解,也没有收到“ NOT NULL”错误,就像我在SQL数据库中看到的那样。如何将SQL Server错误报告回C#ASP.NET MVC应用程序? ([Required]属性可以使用,但我想查看C#中的SQL Server错误)

var source = new Customer();

source.FirstName = "Joe";
source.LastName = "Smith";  // missing Address, City, State, Zip, etc
_context.Customer.Add(source);

SQL Server中显示错误:

  

无法将值NULL插入表'dbo.Customer'的'Last'列中;列不允许为空。 INSERT失败。

如何在C#ASP.NET MVC程序中得到这些错误?

2 个答案:

答案 0 :(得分:2)

将[必需]属性添加到您的媒体资源。

[Required]
public string FirstName{ get; set; }

然后,如果您尝试保存Customer而不给FirstName属性分配值,则EF将抛出System.Data.Entity.Validation.DbEntityValidationException异常

try
{
   _context.SaveChanges();
}
catch (DbUpdateException e)
{
}

答案 1 :(得分:1)

如果您数据库中的字段不是Nullable类型(NOT NULL),则应添加[Required]属性,以确保实体框架在向SQL Server发出请求之前将检查null

如果该字段是主键,则应改用[Key]属性

看看本教程here