Ожидаемый тип был 'System.Nullable`1 [System.Guid]', но фактическое значение было пустым. - PullRequest
0 голосов
/ 05 мая 2020

Исключительная ситуация при чтении значения из базы данных для свойства EMWH.UniqueAttchID. Ожидаемый тип был 'System.Nullable`1 [System.Guid]', но фактическое значение было нулевым.

Я использую EFCore 5.0 и получаю указанную выше ошибку. Если в моем представлении EMWH я скрываю все записи, где в UniqueAttchID есть NULL, он работает нормально. Но я не могу найти способ исключить записи, в которых главный ключ (для отношения) равен NULL. Но по-прежнему есть возможность просматривать все записи.

Код, вызывающий ошибку

 var workOrder = await _context.EMWHs.AsNoTracking()
                   .Include(x => x.EMWIs).ThenInclude(x => x.HQATs)
                   .Where(x => x.KeyID == WorkOrderKeyId).SingleOrDefault();

EMWH

public class EMWH
    {
        public byte EMCo { get; set; }
        public string WorkOrder { get; set; }
        public string Equipment { get; set; }
        public string? Description { get; set; }
        public Guid? UniqueAttchID { get; set; }
        [Column("udServiceRecordYN")]
        public string? ServiceRecordYN { get; set; }
        public char Complete { get; set; }
        public long KeyID { get; set; }
        [Column("DateSched")]
        [Display(Name = "Scheduled Date")]
        public  DateTime ScheduledDate { get; set; }
        public virtual EMEM EMEM { get; set; }
        public virtual  IEnumerable<EMWI> EMWIs { get; set; }
        public virtual IEnumerable<HQAT> HQATs { get; set; }
    }

HQAT

 public class HQAT
    {
        public byte HQCo { get; set; }
        public string FormName { get; set; }
        public string KeyField { get; set; }
        public string Description { get; set; }
        public string AddedBy { get; set; }
        public DateTime? AddDate { get; set; }
        public string DocName { get; set; }
        public int AttachmentID { get; set; }
        public string TableName { get; set; }
        public Guid? UniqueAttchID { get; set; }
        public string OrigFileName { get; set; }
        public string DocAttchYN { get; set; }
        public string CurrentState { get; set; }
        public int? AttachmentTypeID { get; set; }
        public string IsEmail { get; set; }
        public long KeyID { get; set; }
        public virtual udEMCD EMCD { get; set; }
        public virtual HQAF HQAF { get; set; }
        public virtual EMWH EMWH { get; set; }
        public virtual EMWI EMWI { get; set; }
        public virtual udEMED EMED { get; set; }
    }

DBContext

modelBuilder.Entity<EMWH>().ToTable("EMWH").HasKey(k=>new { k.EMCo, k.WorkOrder });
modelBuilder.Entity<HQAT>().HasOne(x => x.EMWH).WithMany(x => x.HQATs).HasForeignKey(x => x.UniqueAttchID)
            .HasPrincipalKey(x => x.UniqueAttchID);

1 Ответ

0 голосов
/ 05 мая 2020

У вас настроена связь, рассчитанная на public Guid? UniqueAttchID { get; set; } для ключей между сущностями, но у вас это настроено как тип GUID, допускающий значение NULL, поэтому при выполнении запроса БД, вероятно, обнаружит в таблице нулевое значение, и не может разрешить отношения. Простое решение и, возможно, лучшая практика - сделать эти свойства непустыми или определить отношения с использованием типов int или long в качестве идентификаторов, чтобы они не могли быть нулевыми, и убедиться, что ваши INSERT и UPDATE запросы правильно устанавливают отношения. В любом случае, вы должны начать с нуля, и если у вас уже есть записи в таблицах, которые имеют нулевые значения, которые вы ожидаете использовать в качестве ключей, вы могли бы немного поработать, чтобы выяснить, как они должны быть связаны и замена нулей значениями GUID.

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