1

Buyers と BuyerOrders の 2 つのエンティティ タイプがあります。Buyer には複数の 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 が表示されません。私は何を間違っていますか?

4

1 に答える 1

1

MSDNのドキュメントから

KeepCurrentValues : Refresh メソッドが元の値をデータベースから取得した値と交換するように強制します。現在の値は変更されません。

一方、KeepChanges

KeepChanges : 変更された現在の値を保持するように Refresh メソッドを強制しますが、データベースの値で他の値を更新します。

また、Attach メソッドでは、「as modified」を指定できるオーバーロードを使用します。

したがって、コードでは、おそらく変更する必要があるように見えます

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 に答える