У меня есть первая настройка кода EF, где учетная запись может иметь много транзакций в ней.
public class Account : BaseEntity
{
public string AccountNumber { get; set; }
public string AccountTitle { get; set; }
public decimal CurrentBalance { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
[JsonConverter(typeof(JsonStringEnumConverter))]
public AccountStatus AccountStatus { get; set; }
public ICollection<Transaction> Transactions { get; set; }
}
public enum AccountStatus
{
Active = 0,
InActive = 1
}
и транзакция настраивается следующим образом.
public class Transaction : BaseEntity
{
[JsonConverter(typeof(JsonStringEnumConverter))]
public TransactionType TransactionType { get; set; }
public DateTime TransactionDate { get; set; }
public decimal TransactionAmount { get; set; }
public Account Account { get; set; }
}
public enum TransactionType
{
Deposit = 0,
Withdraw = 1
}
Общая c реализация репозитория метода Add выглядит так:
public TEntity Add(TEntity t)
{
t.Id = Guid.NewGuid().ToString();
DbSet.Add(t);
return t;
}
У меня есть репозиторий generi c, реализованный также с использованием единицы работы.
на уровне служб, который я добавляю транзакция, подобная этой
public async Task<Transaction> AddTransaction(Transaction transaction, string accountId)
{
// var account = await _unitOfWork.AccountRepository.GetAsync(accountId);
// transaction.Account = account;
var result = _unitOfWork.TransactionRepositoy.Add(transaction);
await _unitOfWork.CommitAsync();
return result;
}
CommitAsyn c, просто вызывает _context.SaveChangesAsyn c ();
, когда я добавляю транзакцию, как определить, какую учетную запись я добавляю для ? Потому что как сказано выше. У учетной записи может быть много транзакций (ICollection), и транзакция принадлежит учетной записи (учетная запись свойств навигации).