2012-09-03 95 views
0

我有一個真正的問題,我知道這是因爲我只是不夠了解。我搜查了大約50篇文章,找不到答案。MVC 3 ViewModel創建方法模型

這裏是我的域模型

Namespace Models 
    Public Class Article 
     Public Property ArticleId As Integer 
     Public Property Author As String 

     <DisplayFormat(DataFormatString:="{0:D}")> 
     Public Property CreatedOn As DateTime 

     <DisplayFormat(DataFormatString:="{0:D}")> 
     Public Property LastModified As DateTime 

     <AllowHtml()> 
     Public Property Content As String 
     Public Property Title As String 
     Public Property Excerpt As String 
     Public Property IsPublic As Boolean 

     Public Overridable Property Category As ICollection(Of Category) 
     Public Overridable Property Tags As ICollection(Of Tag) 
     Public Overridable Property Status As ICollection(Of Status) 
     Public Overridable Property Comments As ICollection(Of Comment) 
    End Class 
End Namespace 


Namespace Models 
    Public Class Status 
     Public Property StatusId As Integer 
     Public Property Name As String 

     Public Overridable Property Articles As ICollection(Of Article) 
    End Class 
End Namespace 


Namespace Models 
    Public Class Category 
     Public Property CategoryId As Integer 
     Public Property Name As String 

     Public Overridable Property Articles As ICollection(Of Article) 
    End Class 
End Namespace 

Namespace Models 
    Public Class Tag 
     Public Property TagId As Integer 
     Public Property Name As String 

     Public Overridable Property Articles As ICollection(Of Article) 
    End Class 
End Namespace 

這裏是我的視圖模型(基於我的域模型)

Namespace ViewModels.Admin 
    Public Class ArticleViewModel 
     Public Property Article As Article 
     Public Property CategoryId As Integer 
     Public Property StatusId As Integer 
     Public Property Tags As ICollection(Of Tag) 
    End Class 
End Namespace 

我不知道如何使用這些數據交叉圖案的節省。我現在嘗試了很多方法,我不知道在哪裏看。我已經嘗試了幾本書,但沒有人真正深入這一點。我也看看Contoso大學的項目,但它看起來不像我的項目。誰能幫忙?

+0

要保存他們做些什麼呢至? – smartcaveman

+0

如果有幫助,請參閱下面的評論。我通過EF代碼第一個模型將它們保存到數據庫中。 – Chuck

回答

1

如果您使用實體框架來執行DAL,則可以非常輕鬆地完成此操作。只需從上往下構建對象。因此,在您的示例中,從ViewModel獲取文章並從View Model的其他部分填充其導航屬性。

不要擔心佈線子對象的導航屬性。

然後,您可以使用文章集合上的AddObject將此文章添加到上下文,並且所有子屬性也應插入並連接。

當心可能在數據庫中已存在的子性質的,我已經看到了EF做這些項目的插入,即使他們有標識,而不僅僅是更新映射表等

+0

感謝您的幫助!你在說什麼嗎?或者有更簡單的映射方法嗎?在我工作少,在意義上更容易,感覺不容易我要做的工作太多了...... 如果ModelState.IsValid然後 昏暗的文章=新文章(){帶_ .Author = 「管理」, 。內容= viewModel.Content, .IsPublic =真 } db.Articles.Add(文章) db.SaveChanges() 返回RedirectToAction( 「指數」) – Chuck

+0

這看起來我的權利,如果沒有將一些代碼映射到視圖模型,我認爲automapper有一些功能可以幫助解決這個問題,但公平地說,它會讓我覺得這是您可能會遇到的一種情況以及編寫代碼來完成它。 – Slicksim

+0

從我的viewmodel映射我的「主要」文章到確保類別和狀態(其他模型)等內容得到更新後,我該如何去做。現在它正確地保存了我的主要文章,但沒有其他屬性在我的連接表中更新... – Chuck