Я пытаюсь сделать метод Post, используя Entity Framework. У меня есть объекты:
public class Pedido:BaseModel
{
public Pedido()
{
}
public Pedido(List<PedidoItem> itens, double valorTotal, DateTime tempoTotal)
{
Id = 0;
Itens = itens;
ValorTotal = valorTotal;
TempoTotal = tempoTotal;
}
public Pedido(int id, List<PedidoItem> itens, double valorTotal, DateTime tempoTotal)
{
Id = id;
Itens = itens;
ValorTotal = valorTotal;
TempoTotal = tempoTotal;
}
public double ValorTotal { get; set; }
public DateTime TempoTotal { get; set; }
public List<PedidoItem> Itens { get; set; }
public override BaseModel WithId(int id)
{
throw new System.NotImplementedException();
}
}
public class PedidoItem:BaseModel
{
public PedidoItem()
{
}
public PedidoItem(int saborId, int tamanhoId, List<PedidoItemAdicional> adicionais)
{
Id = 0;
SaborId = saborId;
TamanhoId = tamanhoId;
Adicionais = adicionais;
}
public PedidoItem(int id, int saborId, int tamanhoId, List<PedidoItemAdicional> adicionais)
{
Id = id;
SaborId = saborId;
TamanhoId = tamanhoId;
Adicionais = adicionais;
}
[ForeignKey(nameof(Sabor))]
public int SaborId { get; set; }
public Sabor Sabor { get; set; }
[ForeignKey(nameof(Tamanho))]
public int TamanhoId { get; set; }
public Tamanho Tamanho { get; set; }
public List<PedidoItemAdicional> Adicionais;
[ForeignKey(nameof(Pedido))]
public int PedidoId { get; set; }
public override BaseModel WithId(int id)
{
throw new System.NotImplementedException();
}
}
public class PedidoItemAdicional:BaseModel
{
public PedidoItemAdicional()
{
}
public PedidoItemAdicional(int adicionalId, int pedidoItemId)
{
Id = 0;
AdicionalId = adicionalId;
PedidoItemId = pedidoItemId;
}
public PedidoItemAdicional(int id, int adicionalId, int pedidoItemId)
{
Id = id;
AdicionalId = adicionalId;
PedidoItemId = pedidoItemId;
}
[ForeignKey(nameof(Adicional))]
public int AdicionalId { get; set; }
public Adicional Adicional { get; set; }
[ForeignKey(nameof(PedidoItem))]
public int PedidoItemId { get; set; }
public PedidoItem PedidoItem { get; set; }
public override BaseModel WithId(int id)
{
throw new NotImplementedException();
}
}
public abstract class BaseModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public abstract BaseModel WithId(int id);
}
Я получаю JSON:
{
"itens":[
{
"tamanhoid":1,
"saborid":1,
"adicionais":[
{
"id":1
},
{
"id":2
}
]
}
]
}
Когда я вставляю в банк (добавить + сохранить) "pedido" и "pedidoItem" сохранены, но "pedidoItemAdicional" нет.
Для создания вставки я использую репозиторий:
public class PedidoRepository:BaseRepository<Pedido,DataContext>
{
public PedidoRepository(DataContext context):base(context)
{
}
}
public abstract class BaseRepository<TEntity, TContext>
where TEntity : BaseModel
where TContext : DbContext
{
protected DbSet<TEntity> DbSet;
protected TContext DbContext;
protected BaseRepository(TContext dbContext)
{
DbContext = dbContext;
DbSet = DbContext.Set<TEntity>();
}
public virtual async Task<List<TEntity>> Get
(
Expression<Func<TEntity, object>> orderBy,
bool asNoTracking = true,
int take = 100
)
{
var databaseCount = await DbSet.CountAsync().ConfigureAwait(false);
if (asNoTracking)
return await DbSet.AsNoTracking().OrderBy(orderBy).Take(take).ToListAsync().ConfigureAwait(false);
return await DbSet.OrderBy(orderBy).Take(take).ToListAsync().ConfigureAwait(false);
}
public virtual async Task<List<TEntity>> Get
(
Expression<Func<TEntity, object>> orderBy,
Expression<Func<TEntity, bool>> where,
bool asNoTracking = true,
int take = 100
)
{
if (asNoTracking)
return await DbSet.AsNoTracking().OrderBy(orderBy).Where(where).Take(take).ToListAsync()
.ConfigureAwait(false);
return await DbSet.OrderBy(orderBy).Where(where).Take(take).ToListAsync()
.ConfigureAwait(false);
}
public virtual async Task AddAsync(TEntity entity)
{
await DbSet.AddAsync(entity).ConfigureAwait(false);
}
public virtual Task UpdateAsync(TEntity entity)
{
DbSet.Update(entity);
return Task.CompletedTask;
}
public virtual Task RemoveAsync(TEntity entity)
{
DbSet.Remove(entity);
return Task.CompletedTask;
}
public virtual async Task SaveChangesAsync()
{
await DbContext.SaveChangesAsync().ConfigureAwait(false);
}
}
[HttpPost]
[Route("")]
public async Task<ActionResult<Response<Pedido>>> Insert(Pedido pedido)
{
await _repositoryPedido.AddAsync(obj);
await _repositoryPedido.SaveChangesAsync();
return null;
}
Прием в порядке, "pedidoItemAdicional" получен, но не сохранен ... Я хотел бы сохранить его как с "pedidoItem".