1

我有 2 个实体类型买家和买家订单。买家可以包含多个买家订单,买家订单列表可以由用户编辑。当我想添加一些 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。我究竟做错了什么?

4

1 回答 1

1

来自MSDN 文档

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();
}
于 2012-05-08T17:27:07.643 回答