I am using EF Core with a generic repository pattern.
The Order table has a one-to-many relationship with OrderItem. OrderId is a foreign key in OrderItem.
The POCO model classes:
public class OrderEntity
{
public long Id { get; set; }
public long PaymentReference { get; set; }
public DateTimeOffset ModifiedDate { get; set; }
public DateTimeOffset CreatedDate { get; set; }
public IList<OrderItemEntity> OrderItemEntities { get; set; }
}
public class OrderItemEntity
{
public long Id { get; set; }
public long OrderId { get; set; }
public Position Position { get; set; }
public AlterationType Type { get; set; }
public AlterationItemType ItemType { get; set; }
public AlterationStatus Status { get; set; }
public double Measurment { get; set; }
public double AlterationCost { get; set; }
}
My service:
public class OrderService : Repository<OrderEntity>, IOrderService
{
public OrderService(SalesContext context) : base(context)
{
}
public long CreateOrder(OrderEntity orderEntity)
{
base.Add(orderEntity);
base.Save();
return orderEntity.Id;
}
public IEnumerable<OrderEntity> FilterOrderByFilterCriteria(long Id)
{
return base.SelectByCriteria(item => item.Id == Id);
}
public IEnumerable<OrderEntity> GetAllOrders()
{
return base.SelectAll("OrderItem");
}
}
Generic repository:
public class Repository<T> : IRepository<T> where T : class
{
private readonly SalesContext _dbContext;
public Repository(SalesContext dbContext)
{
_dbContext = dbContext;
}
public virtual T Add(T obj)
{
_dbContext.Set<T>().Add(obj);
return obj;
}
public virtual void Update(T entity)
{
_dbContext.Entry(entity).State = EntityState.Modified;
_dbContext.SaveChanges();
}
public virtual T Delete(T obj)
{
_dbContext.Set<T>().Remove(obj);
return obj;
}
public virtual IEnumerable<T> SelectAll(string entityToInclude)
{
return _dbContext.Set<T>().Include(entityToInclude).ToList();
}
public virtual IEnumerable<T> SelectByCriteria(Expression<Func<T, bool>> predicate)
{
return _dbContext.Set<T>().Where(predicate);
}
public virtual string Save()
{
_dbContext.SaveChanges();
return string.Empty;
}
}
}
How can I insert multiple order-item when I am inserting order in the same connection to the database?
OrderEntitybeing created? If you simply initialize theOrderItems.OrderItemEntitiesproperty of a newOrderEntityto a new list ofOrderItems before adding it to the database, all theOrderItems in the list will also be automatically added to the database.OrderEntityobject created at the calling site before callingCreateOrder()? Is it through model binding of a post request? Or do you manually create an instance?