我是新來使用MVC,我試圖做一個使用其他模型的模型。ASP.NET 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
相關的代碼描述的技術m爲:
public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
其中I提供上述查詢。
問題(最後!)是Entity Framework想要一個密鑰。這不會成爲問題,但在這種情況下,關鍵是Table1.table1KeyPart和Table2.table2KeyPart,對應於Model1.model1Keypart和Model2.model2keypart。
所以,我想在這裏使用第二種方法: in entity framework code first, how to use KeyAttribute on multiple columns
也就是說,一個使用HasKey,用u.Model1.model1KeyPart
,u.Model2.model2KeyPart
而不是用戶ID和用戶名。就像這樣:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Model3>().HasKey(u => new
{
u.Model1.model1KeyPart,
u.Model2.model2keyPart
});
}
我得到的錯誤:
The properties expression '[u => new <>f__AnonymousType1`2(model1KeyPart = u.Model1.model1KeyPart, model2KeyPart = u.Model2.model2KeyPart)]' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'.
這東西是可以解決的?還是我這樣做是完全錯誤的方式?我想我可以列出模型3中Model1和Model2的所有成員,但是這引入了我真正不想要的冗餘,但是如果這是唯一的方法,那麼我會做。
對不起,如果有任何不清楚的地方,我會盡力澄清事情,如果需要的話。預先感謝任何幫助!
感謝您的答覆! 對不起,但我想我引起了一些混淆。你所擁有的與我所做的相似(請參閱編輯中的新代碼片段)。我認爲問題在於我的LINQ也缺乏。我認爲這可以歸結爲,在LINQ表達式中,我可以做u.Model1.model1KeyPart,還是我必須直接在model3中創建model1KeyPart,以便它像你如何擁有它?很明顯,我有這個方法有一些問題。但也許有解決方法? – tonyd24601