Я использую микро-форму (dapper) и пытаюсь придумать реализацию единицы работы (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 и User, а затем Commit (). Теперь я хочу, чтобы сначала была сохранена база данных ClientDatabase (дочерняя сущность), а затем для идентификатора, который был установлен в ClientDatabase, в результате его вставки в базу данных, было задано свойство внешнего ключа ClientDatabaseId для пользователя перед ним. затем также вставляется в базу данных. Мне просто интересно, решил ли кто-нибудь такую проблему хорошим общим способом?