Как вставить в коллекцию родительского класса с помощью EF Core - PullRequest
0 голосов
/ 20 июня 2020

У меня есть первая настройка кода 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), и транзакция принадлежит учетной записи (учетная запись свойств навигации).

1 Ответ

0 голосов
/ 10 июля 2020

Вам решать, в какую учетную запись добавить транзакцию. Параметр accountId здесь должен быть учетной записью, которую вам нужно добавить.

И я думаю, что две закомментированные вами строки - это именно то, что вам нужно .

Прежде всего, the accountId you pass represents the data of the Account that the transaction needs to be associated with и убедитесь, что таблица Account содержит данные accountId.

Получите данные Account из базы данных в соответствии с accountId, и затем назначьте его в поле Счет транзакции , чтобы сохранить.

Общий код реализации efcore:

   public async Task<Transaction> AddTransaction(Transaction transaction, string accountId)
    {
        transaction.Account = _context.Account.Find(accountId)
         _context.Transaction.Add(transaction);
        await _context.SaveChangesAsync(); 
        return transaction;
    }
...