Entity Framework: как отлавливать ошибки Not Null - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь вставить данные в таблицу SQL Server, которая имеет множество ограничений 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);

  });

При попытке добавить данныев таблице в коде отсутствуют столбцы, поэтому он не может быть вставлен в базу данных.Не знал об этом и не получал ошибок NOT NULL, как я видел бы в базе данных SQL.Как я могу сообщить об ошибках SQL Server обратно в C # ASP.NET MVC приложение?(Атрибут [Required] будет работать, но я хочу просмотреть ошибки SQL Server в C #)

var source = new Customer();

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

Ошибка, отображаемая в SQL Server:

Невозможно вставить значение NULL в столбец'Last', таблица 'dbo.Customer';столбец не допускает пустых значений.Вставить не удается.

Как получить эти ошибки в программе C # ASP.NET MVC?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Если ваше поле в БД имеет тип Nullable (NOT NULL), то вы должны добавить атрибут [Обязательный], чтобы структура сущностей проверила наличие нуля перед выполнением запроса к SQL Server

Если поле имеет значениепервичный ключ, тогда вы должны использовать атрибут [Key] вместо

Взгляните на этот урок здесь .

0 голосов
/ 18 февраля 2019

Добавьте атрибут [Обязательно] в вашу собственность.

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

тогда, если вы попытаетесь сохранить клиента без присвоения значения свойству FirstName, EF сгенерирует исключение System.Data.Entity.Validation.DbEntityValidationException

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