Шаблон единицы работы - управление родительскими и дочерними отношениями

Я использую микроорганизм (dapper) и пытаюсь придумать реализацию Unit Of Work (UoW) для моих репозиториев. Я немного озадачен, как лучше всего справляться с отношениями родитель-ребенок (внешний ключ) в моем UoW. Так, например, если у меня есть следующие две сущности, которые отображаются непосредственно в таблицы базы данных:

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public int ClientDatabaseId { get; set; }

    public ClientDatabase ClientDb { get; set; }
}

public class ClientDatabase
{
    public int Id { get; set; }
    public string DataSource { get; set; }
    public string FailoverPartner { get; set; }
    public string InitialCatalog { get; set; }
}

Где пользователь имеет родительский-дочерние отношения с ClientDatabase через внешний ключ User.ClientDatabaseId. Свойство Id как в User, так и в ClientDatabase - это столбцы Identity. Мой интерфейс UoW определяется следующим образом:

public interface IUnitOfWork
{
    void MarkDirty(object entity);
    void MarkNew(object entity);
    void MarkDeleted(object entity);
    void Commit();
    void Rollback();
}

В какой-то момент в том же IUnitOfWork я хочу вызвать MarkNew () как для ClientDatabase, так и для пользователя, а затем выполнить Commit (). Теперь я хочу, чтобы сначала была сохранена ClientDatabase (дочерняя сущность), а затем для идентификатора, который был установлен в ClientDatabase, в результате вставки базы данных, который должен быть установлен как свойство внешнего ключа ClientDatabaseId на User перед этим. затем также вставляется в базу данных. Мне просто интересно, решал ли кто-нибудь такого рода проблемы обычным способом?

8
задан Alex Webber 10 June 2011 в 10:38
поделиться