0
使用EF 6.X和Asp.Net Web應用程序。EF代碼優先 - 具有子實體的序列號
請考慮下面的父母子女關係。 訂單實體可以有一個或多個訂單行。 在OrderLine實體中,我想要有一個序列列。
作爲上述圖像中示出,該序列應當從1開始對每個訂單。 如何通過EF實現這一目標?期待一個簡單的解決方案來解決這個問題。
使用EF 6.X和Asp.Net Web應用程序。EF代碼優先 - 具有子實體的序列號
請考慮下面的父母子女關係。 訂單實體可以有一個或多個訂單行。 在OrderLine實體中,我想要有一個序列列。
作爲上述圖像中示出,該序列應當從1開始對每個訂單。 如何通過EF實現這一目標?期待一個簡單的解決方案來解決這個問題。
不可能自動執行此操作。訂單行的數據模型需要屬性SequenceNo
。更高級別的抽象Data Access Layer?必須確保每當添加'訂單行'時,填充正確的SequenceNo
。
public class Order
{
// primary Key
public int Id {get; set;}
// an Order has a collection of OrderLines:
public virtual ICollection<OrderLine> OrderLines {get; set;}
...
}
public class OrderLine
{
public int Id {get; set;} // primary key
// foreign key to owning Order
public int OrderId {get; set;}
public virtual Order Order {get; set;}
public int OrderLineNo {get; set;}
public int SequenceNo {get; set;}
...
}
public MyDbContrext : DbContext
{
public DbSet<Order> Orders {get; set;}
public DbSet<OrderLine> OrderLines {get; set;}
...
}
更高的抽象層
public int IntroduceOrder(...)
{
using (MyDbContext dbContext = ...)
{
Order orderToAdd = new Order()
{
...
}
var addedOrder = dbContext.Orders.Add(orderToAdd);
dbContext.SaveChanges();
return addedOrder.Id;
}
}
public OrderLine AddOrderLine(int orderId, ...)
{
using (MyDbContext dbContext = ...)
{
// get the sequenceNo from the orderline of the order with orderId
// with the highest sequenceNo
// = first element when ordered descending
int highestSeqenceNo = dbContext.OrderLines
.Where(orderLine => orderLine.OrderId == orderId)
.Select(orderLine => orderLine.SequenceNo)
.OrderByDescending(sequenceNo => sequenceNo)
.FirstOrDefault();
// if there were no order lines yet, highestSequenceNo has value 0
const int sequenceNoFirstOrderLine = 1;
// or whatever value you want as sequenceNo for the first OrderLine
int nextSequenceNo = (highestSequenceNo == 0) ?
sequenceNoFirstOrderLine :
highestSequenceNo + 1;
OrderLine orderLineToAdd = new OrderLine()
{
...
SequenceNo = nextSequenceNo,
};
var addedOrderLine = dbContext.Orders.Add(orderLineToAdd);
dbContext.SaveChanges();
return addedOrderLine;
}
}
這就是我想要的。謝謝! – Rahul
不能你只需要使用每個訂單行計數器? –
@Ephraim你能提供一個簡單的代碼示例嗎? – Rahul
請解釋關係...示例表做一個垃圾工作,展示與什麼有關的東西。 – Seabizkit