Entity Framework Core 2.2.1 DbQuery error system.Data.SqlTypes.SqlNullValueException - PullRequest
0 голосов
/ 16 января 2019

Попытка работы с DbQuery. Мне нужно получить не-сущность типа UserDetailDTO с использованием сырых SQL. Добавил DbQuery в контекст и вызвал его из контроллера. Но это генерирует system.Data.SqlTypes.SqlNullValueException.

Мой контекст:

public class TrainingAppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbQuery<UserDetailDTO> UserDetailDTO { get; set; }

    public TrainingAppDbContext(DbContextOptions<TrainingAppDbContext> options)
    : base(options)
    {
        Database.EnsureCreated();
    }        
}

Контроллер:

public class AccountController : Controller
{
    private readonly TrainingAppDbContext ct;

    public AccountController(TrainingAppDbContext ct)
    {
        this.ct = ct;
    }

    public IActionResult Test()
    {
        var results = ct.UserDetailDTO.FromSql("SELECT * FROM users").ToList();
        return View();
    }
 }

Когда я вызываю свой UserDetailDTO из контекста, он генерирует ошибку.

ошибка изображения

1 Ответ

0 голосов
/ 09 апреля 2019

Внимательно посмотрите на класс UserDetailDTO и любые другие классы, которые могут иметь внешние ключи к этой таблице в вашей базе данных. Недавно мы обнаружили, что эта ошибка вызвана добавлением аннотации [Обязательные] к нашим сущностям. В приведенном ниже примере атрибут [Required] над FirstName является обязательным, и в вашей таблице не должно быть строк, в которых этот столбец равен нулю.

namespace Entities
{
    public class UserDetailDTO
    {
        public int Id { get; set; }

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

        public string LastName { get; set; }

        public string PhoneNumber { get; set; }

        public string EmailAddress { get; set; }
    }
}

В предыдущих версиях EF Core аннотация данных [Обязательно] игнорировалась. Версия 2.2.1 начала искать эти аннотации в ваших сущностях и применять их. Мы понятия не имели, что это было ошибочно добавлено к некоторым из наших организаций несколько месяцев назад, пока мы не обновили нашу версию EF Core и не начали испытывать эту ошибку. Поскольку в нашем случае аннотация была добавлена ​​некорректно, удаление аннотации решило нашу проблему. Если вы обнаружите, что это является причиной вашей проблемы, и вы действительно хотите, чтобы столбец был обязательным, то у вас, вероятно, есть данные в вашей таблице, где этот столбец равен нулю, что и является причиной ошибки. Исправьте эти неверные данные, сделайте этот столбец не нулевым, и запрос должен снова заработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...