私は MVC を初めて使用し、他のモデルを使用するモデルを作成しようとしています。
データベースに 2 つのテーブルがあるとします。この質問のために、それらを Table1 と Table2 と呼びます。私の MVC プロジェクトでは、これらは Model1 と Model2 に対応しています。今、次のようなモデル 3 が欲しいです。
public class Model3
{
public Model1 model1 { get; set; }
public Model2 model2 { get; set; }
public string someString { get; set; }
}
次のようなT-SQLクエリで作成したいもの:
SELECT * FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.fk = t2.pk
ここで、このクエリを実行するために、 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/advanced-entity-framework-scenarios-for-で説明されている手法を使用しています。 an-mvc-web-アプリケーション
関連するコードは次のとおりです。
public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
上記のクエリを入力します。
問題 (ついに!) は、Entity Framework がキーを必要とすることです。これは問題にはなりませんが、この場合、キーは Model1.model1Keypart と Model2.model2keypart に対応する Table1.table1KeyPart と Table2.table2KeyPart です。
そこで、ここで 2 番目の手法を使用してみました: 最初にエンティティ フレームワーク コードで、複数の列で KeyAttribute を使用する方法
つまり、userID と userName の代わりにu.Model1.model1KeyPart
、 HasKey を使用するものです。u.Model2.model2KeyPart
このような:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Model3>().HasKey(u => new
{
u.Model1.model1KeyPart,
u.Model2.model2keyPart
});
}
エラーが発生します:
プロパティ式 '[u => new <>f__AnonymousType1`2(model1KeyPart = u.Model1.model1KeyPart, model2KeyPart = u.Model2.model2KeyPart)]' は無効です。式はプロパティを表す必要があります: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. 複数のプロパティを指定する場合は、匿名型を使用します: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'.
これは修正可能なものですか?または、これを完全に間違った方法で行っていますか? Model3 内の Model1 と Model2 のすべてのメンバーを一覧表示することもできると思いますが、それは私が本当に望んでいない冗長性をもたらしますが、それが唯一の方法である場合は、そうします。
不明な点がありましたら申し訳ありませんが、必要に応じて整理します。助けてくれてありがとう!