Entity Framework Базовая установка собственного объекта при добавлении - PullRequest
3 голосов
/ 30 апреля 2019

У меня есть следующий график:

public class Report
{
    public Guid Id { get; set; }
    public ICollection<EmployeeEntry> EmployeeEntries { get; set; }
}

public class EmployeeEntry
{
    public Guid Id { get; set; }
    public DateTimeOffset EntryDate { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public string City { get; set; }
    public string State { get; set; }
}

И используя fluentApi, я сконфигурировал Address как принадлежащий объекту EmployeeEntry объект, как показано ниже:

private void ConfigureEmployeeEntry(EntityTypeBuilder<EmployeeEntry> builder)
{
    builder.OwnsOne(x => x.Address, w =>
    {
        w.Property(x => x.City).HasMaxLength(100);
        w.Property(x => x.State).HasMaxLength(100);
    });
}

Но когда у меня один и тот же адрес для более чем одного EmployeeEntry и работает следующий код:

dbContext.Reports.Add(report);
dbContext.SaveChanges();

Я получил следующее исключение:

Объект типа «EmployeeEntry» разделяет таблицу report.EmployeeEntries с сущностями типа 'EmployeeEntry.Address # Address', но нет объектов этого типа с тем же значением ключа, которое было помечено как «Добавлено». Рассматривать используя 'DbContextOptionsBuilder.EnableSensitiveDataLogging', чтобы увидеть ключевые значения.

Как я заметил, после добавления отчета до SaveChanges() EF делает Address как null.

Я использую последнюю версию ядра EntityFramework.

1 Ответ

4 голосов
/ 30 апреля 2019

Но когда у меня один и тот же адрес для более чем одного EmployeeEntry

Если вы имеете в виду один и тот же Address экземпляр , документация EF Core для Типы Owned Entity прямо заявляют, что не в настоящее время поддерживается - в соответствии с Ограничения - Текущие недостатки :

  • Экземпляры типов собственных объектов не могутбыть общим для нескольких владельцев (это хорошо известный сценарий для объектов-значений, которые не могут быть реализованы с использованием собственных типов объектов)

Так что либо убедитесь, что вы используете разные экземпляры (даже с одним и тем жезначений свойств), или не используйте принадлежащие типы сущностей, но обычные типы сущностей и отношения.

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