1

ViewModel に次のコードがあります。エンティティからレコードを削除したいのですが、うまくいきません。誰かが光を当てることができますか...?

Usertable users = new Usertable();
users.User_ID = Entity.User_ID;
users.user_role = "Admin";
Entity.CompanyRoles.Remove(users); 

代わりに、Remove を Add に置き換えると、エンティティに 1 つのレコードが追加されます。

削除だけが私にとって懸念事項です。

4

2 に答える 2

1

まず、削除しようとしているエンティティをフェッチしてから削除し、変更をデータコンテキストに保存する必要があります。

var userToRemove = Entity.CompanyRoles.Single(cr => cr.user_role == "Admin");
Entity.CompanyRoles.DeleteObject(userToRemove);
Entity.SaveChanges();
于 2012-10-01T16:07:54.947 に答える
0

オブジェクトは値ではなく参照によって比較されるためEntity.CompanyRoles、削除しようとしているオブジェクトとしてメモリ内に正確な参照が含まれていない限り、コレクション内のオブジェクトを見つけて削除することはありません。

それを修正する2つの方法があります。

最良の方法は、 Paulが提案するように、コレクション内のオブジェクトへの参照を取得することです。

var userToRemove = Entity.CompanyRoles.Single(cr => 
    cr.user_role == "Admin" && cr.User_ID = Entity.User_ID);

Entity.CompanyRoles.Remove(userToRemove);

または、機能する別の方法は、メモリ参照に関係なく、データが同じである場合にオブジェクトを上書きして、.Equals()それらが等しいと見なすことです。特別な場合を除いて、通常これはお勧めしません。これは、このオブジェクトの1つのコピーを使用して別のコピーと比較する操作に影響するためです。.Equals()

public override bool Equals(object obj)
{
    if (obj == null || !(obj == MyClass))
        return false; 

    var obj2 = obj as MyClass;

    return obj2.user_role == this.user_role && obj2.User_ID == this.User_ID;
}
于 2012-10-01T19:02:12.600 に答える