Ошибка при загрузке объекта с отношением от 1 до 0..1 Entity Framework - PullRequest
1 голос
/ 16 марта 2020

У меня есть следующие отношения родитель-потомок:

Родительская сущность:

[Table("PHOTO_DATA")]
public class PhotoData
{
    public PhotoData()
    {
        PhotoBlob = new BlobData();
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("PHOTO_N")]
    public long IdNumber { get; set; }

    ...

    public virtual BlobData PhotoBlob { get; set; }
}

Дочерняя сущность:

[Table("BLOB_DATA")]
public class BlobData
{
    [Key]
    [Column("PHOTO_N")]
    public long IdNumber { get; set; }

    [Column("FILE_IM", TypeName = "BLOB")]
    public byte[] FileImage { get; set; }

    public virtual PhotoData Photo { get; set; }
}

В моем DBContext отношение определено имеет от 1 до 0..1 PhotoData может иметь 0 или 1 BlobData

modelBuilder.Entity<PhotoData>()
            .HasOptional(photo => photo.PhotoBlob)
            .WithRequired(blob => blob.Photo);

Теперь я хочу загрузить PhotoData с соответствующим PhotoBlob, используя следующую команду:

var data = dbcontext.PhotoDatas.Include(x => x.PhotoBlob).Where(s => s.IdNumber == id).FirstOrDefault();

И Я получаю следующую ошибку:

Multiplicity constraint violated. The role 'PhotoData_PhotoBlob_Target' of the relationship 'Data.PhotoData_PhotoBlob' has multiplicity 1 or 0..1.

Как решить проблему?

1 Ответ

0 голосов
/ 16 марта 2020

Причина этой проблемы не очевидна. Это происходит потому, что вы инициируете BlobData в конструкторе PhotoData. Если я делаю это в своей собственной среде, я получаю то же исключение.

Как я объяснил здесь , никогда не будет хорошей идеей инициировать ссылочные свойства в конструкторах классов сущностей. Я еще не знал, что это вызвало этот побочный эффект.

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