解決しやすいと思っていた問題があります。 これは私のシナリオです(自己追跡を使用しているエンティティフレームワーク4の接続されていないエンティティ)。 私は2つのエンティティを持っているとしましょう:ユーザ、注文。 asp.netページからデータベースから1人のユーザーと1つの注文を取得します。エンティティフレームワークの自己追跡エンティティでの更新
const int userId = 1;
const int orderId = 1;
var userManager = new UserManager();
var orderManager = new OrderManager();
var user = userManager.GetUser(userId);
var order = channelManager.GetChannel(channelId);
user.Orders.Add(order);
ここで、注文を追加するユーザーを更新する関数を作成する必要があります。
私のような何かを書いた:私はこの機能にエラーがあり、すべてをデバッグしていない
public bool UpdateUser(User user)
{
context.AttachTo("Users", user);
var stateMgr = context.ObjectStateManager;
var stateEntry = stateMgr.GetObjectStateEntry(user);
for (int i = 0; i < stateEntry.CurrentValues.FieldCount; i++)
{
bool isKey = false;
string name = stateEntry.CurrentValues.GetName(i);
foreach (var keyPair in stateEntry.EntityKey.EntityKeyValues)
{
if (string.Compare(name, keyPair.Key, true) == 0)
{
isKey = true;
break;
}
}
if (!isKey)
{
stateEntry.SetModifiedProperty(name);
}
}
context.ApplyCurrentValues("Users", user);
return context.SaveChanges() > 0;
}
を私は期待通りのエンティティが更新されていないデータベースを確認したら、OKのようですが、。 私は、切断されたエンティティが単純なものだったと思っていましたが、明らかにそうではありません。 誰かが私にEF4との接続されていないオブジェクトのグラフ全体を更新するロジックを解説できますか?私が論理を覆す必要があり、見るべきリンクの集まりを持っていなければなりませんか。私はすでにインターネットを見ている時間を過ごしましたが、どれが正しいかわからないほど多くのアトラクションを見つけています。
ありがとうございました