Обновление связанных сущностей ASP.NET Boilerplate - PullRequest
0 голосов
/ 25 апреля 2018

Я только начал использовать ASP.NET Boilerplate, и я хочу автоматически обновить сущность и связанную с ней сущность.Например, когда я обновляю сущность Person, я бы хотел, чтобы адрес также обновлялся.Вот как я определил сущности:

public class Person : FullAuditedEntity<long>, IMayHaveTenant, IPassivable
{
    public const int MaxFirstNameLength = 256;
    public const int MaxLastNameLength = 256;

    [MaxLength(MaxFirstNameLength)]
    public string FirstName { get; set; }
    [MaxLength(MaxLastNameLength)]
    public string LastName { get; set; }
    public bool IsActive { get; set; }
    public int? TenantId { get; set; }

    public Address Address { get; set; }

    public Person()
    {
        CreationTime = Clock.Now;
    }
}

public class Address : FullAuditedEntity<long>, IMayHaveTenant, IPassivable
{
    public string Street1 { get; set; }
    public string Street2 { get; set; }
    public virtual long? PersonId { get; set; }
    [ForeignKey("PersonId")]
    public virtual Person Person { get; set; }
    public bool IsActive { get; set; }
    public int? TenantId { get; set; }

    public Address()
    {
        CreationTime = Clock.Now;
    }
}

Знаете ли вы, как я могу добиться этого, используя текущую реализацию этой инфраструктуры?

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Я бы посоветовал вам пересмотреть это, поскольку у вас есть Address->Person и Person->Address. С этим было бы нелегко иметь дело.

Если бы это был я, у меня было бы просто свойство Address для Person, т.е. Person.Address, и использовать атрибут внешнего ключа. Атрибут FK означает, что сохранение персоны с измененным адресом также будет отслеживать изменение адреса и автоматически сохранять его для вас.

Если один адрес может быть связан с> 1 человеком, вы также можете дополнительно добавить свойство навигации в класс адресов, чтобы вы могли перейти ко всем лицам, связанным с одним адресом, например Address.Persons

если вы не используете атрибут внешнего ключа, он рассматривается как независимая ассоциация - поэтому обрабатывается как отдельный объект в диспетчере состояний / отслеживании изменений.

...