我有2种实体类型买家和买家订单。买方可以包含多个BuyerOrders,并且用户可以编辑BuyerOrders列表。当我想添加一些BuyerOrders时,我称之为方法:
private static void CreateOrdersForBuyer(Buyer buyer, int[] selectedLeadTypes)
{
foreach (var order in selectedLeadTypes.Select(leadTypeId => new BuyerOrder
{
Buyer = buyer,
OfferTypeID = (int) OfferTypes.Referral,
Price = 1,
RegistrationDate = DateTime.Now,
StatusID = (int) BuyerOrderStatus.Pending,
LeadtypeID = leadTypeId,
Profit = 1
}))
{
buyer.BuyerOrders.Add(order);
}
}
然后保存买家:
GenericRepository.Instance.Save(buyer);
保存方法:
public virtual void Save<T>(T value) where T : class
{
//LegalLeadsDataContext.Instance = null;
LegalLeadsDataContext.Instance.GetTable<T>().Attach(value);
LegalLeadsDataContext.Instance.Refresh(RefreshMode.KeepCurrentValues, value);
LegalLeadsDataContext.Instance.SubmitChanges();
}
之后我发现数据库中没有新的BuyerOrders。我做错了什么?
答案 0 :(得分:1)
KeepCurrentValues :强制Refresh方法将原始值与从数据库中检索的值交换。没有修改当前值。
而KeepChanges
KeepChanges :强制Refresh方法保留已更改的当前值,但使用数据库值更新其他值。
此外,Attach方法使用允许您指定“已修改”的重载。
因此,在您的代码中,您可能需要更改
public virtual void Save<T>(T value) where T : class
{
//LegalLeadsDataContext.Instance = null;
LegalLeadsDataContext.Instance.GetTable<T>().Attach(value, true);
LegalLeadsDataContext.Instance.Refresh(RefreshMode.KeepChanges, value);
LegalLeadsDataContext.Instance.SubmitChanges();
}