2012-06-27 66 views
4

我是新來使用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 

現在,運行此查詢我」利用在http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/advanced-entity-framework-scenarios-for-an-mvc-web-application

相關的代碼描述的技術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.model1KeyPartu.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的所有成員,但是這引入了我真正不想要的冗餘,但是如果這是唯一的方法,那麼我會做。

對不起,如果有任何不清楚的地方,我會盡力澄清事情,如果需要的話。預先感謝任何幫助!

回答

4

我認爲你需要定義組合鍵,如果你正在使用實體框架代碼首先,你可以在OnModelCreating方法做到這一點在dbContext.cs這樣

modelBuilder.Entity<Model3>().HasKey(s => new { s.Model1Key, s.Model2Key }); 
+0

感謝您的答覆! 對不起,但我想我引起了一些混淆。你所擁有的與我所做的相似(請參閱編輯中的新代碼片段)。我認爲問題在於我的LINQ也缺乏。我認爲這可以歸結爲,在LINQ表達式中,我可以做u.Model1.model1KeyPart,還是我必須直接在model3中創建model1KeyPart,以便它像你如何擁有它?很明顯,我有這個方法有一些問題。但也許有解決方法? – tonyd24601

相關問題