データレイヤでEF(コードファースト)を使用することで、エンティティ変更の監査機能を有効にする必要があります。変更トラッカーを使用して値タイプのプロパティの変更を正常に取得する方法を理解できました。また、多対多の関係を記録するために必要な情報を取得する方法を理解したことも信じています。1対多リレーションシップに対するエンティティフレームワークの監査と関連エンティティのキャプチャ
残りの問題は、1対多の関係をログに記録し、エンティティ情報を取得する方法です。
次のエンティティでは、エスニシティが変更されたと仮定します。
public class Person
{
public Guid Id { get; set; }
public Guid? EthnicityId { get; set; }
public Ethnicity Ethnicity { get; set; }
}
SaveChangesのシーンの背後には、変更されたプロパティのキー値ペアの一覧のみが表示されます。この場合、実際には "EntityId"、 "{GUID HERE}"となります。私はguidが変更されたことを記録することができますが、その情報は本質的にユーザーにとって役に立たないものです。私がキャプチャする必要があるものは、表示名(私たちのエンティティのすべてが実装しているもの)であり、同様にログに記録されます。
私は考えることができる唯一のこと:(免責事項は、これは私には恐ろしい解決策のように感じている)
- は、プロパティ名を見てください。
- 文字列がIdで終わるが、単に "Id"でない場合は、それを切り捨てます。
- このタイプへの参照を取得するには、トリムされたプロパティ名文字列を使用してください(この場合はエンテニティ)
- EFを再度使用して、そのタイプのGUIDでIDを取得します。
- DisplayNameを持つ基本型としてオブジェクトをキャストします。
- 表示名を取得し、ログに追加します。
私は本当にこれを行う必要はありません。私はこれが前に起きていないと想像することはできません。基礎となるエンティティリンクを公開する魔法はどこにもありませんか?
ありがとうございます!