私は EntityFramework 5 EDMX デザイナーを使用しており、人物の姓と名をエンティティの単一のフィールド値 (名前など) に結合したいと考えています。
以前のバージョンではこれを行う方法があると思っていましたが、必要なことを行うために利用できるものは何もありません。
これはまだ可能ですか?
私は EntityFramework 5 EDMX デザイナーを使用しており、人物の姓と名をエンティティの単一のフィールド値 (名前など) に結合したいと考えています。
以前のバージョンではこれを行う方法があると思っていましたが、必要なことを行うために利用できるものは何もありません。
これはまだ可能ですか?
いいえ、できません。モデル定義関数を作成してクエリで使用できますが、エンティティの一部にはなりません。エンティティが読み取り専用の場合は、列を組み合わせてデータベース ビューを作成し、テーブルの代わりにマップすることができます。これは、列を単一のプロパティに結合することがそれほど簡単ではない主な理由も示しています。読み取り中の自動連結は簡単ですが、正しい値を正しい列に保存するための自動分解は難しく、エラーが発生しやすくなります。
クエリ以外の目的で組み合わせたプロパティが必要な場合は、エンティティ クラスの別の部分を作成し、独自の計算プロパティを追加するだけです。クエリ用に結合されたプロパティが必要な場合は、モデル定義関数を使用します。
私がこれを行う方法は、Computed Column
ここで説明されているように:
計算列を使用すると、LINQ クエリでそのような列を使用できるようになります。例えば:
var users = Database.Users.Where(u => u.FullName.ToLower().Contains("string"));
このプロパティは実際にはモデル オブジェクトの一部であるため、「LINQ to Entities ではサポートされていません」などのエラーは発生しません。面倒な作業はすべてデータベース側で行われます。
もちろん、FullName
プロパティを部分クラスに配置して使用することもできます。
public string FullName
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
この場合、LINQ クエリでこのプロパティを使用できるようにするには、.ToList()
最初に ( ) を呼び出す必要があります。水分補給/あなたのすべてを思い出させます。これは望ましくありません。Database.Users.ToList();
.ToList()
Users
FullName
ここで説明されているプロパティの実装を試すこともできます: Entity Framework Code First Migrations の計算列