2014-02-12 37 views
-2

我目前正在使用存儲庫的新mvc網站。我一直使用oldschool sql,現在是時候繼續前進。如何將模型和存儲庫製作成一類屬性?

所以我現在有一個存儲庫與我的數據庫和屬性,但我也有一個模型具有幾乎相同的屬性來驗證插入新值之前的所有字段。現在我有兩個具有幾乎相同屬性的類。有沒有一種方法來驗證我的資源庫中的屬性?

所以我在這個例子中正在做的是用我的倉庫的信息填充我的模型,所以我可以稍後再驗證它。但我只想返回存儲庫,我不確定這是否可能,但我很確定它是。

例子:

public ActionResult Wijzig(int id) 
    { 
     // Generate view model 
     var bundleModel = new Models.BundleGebruikersPasswordModel 
     { 
      WijzigGebruikersModel = new Models.WijzigGebruikersModel(), 
      PasswordModel = new Models.PasswordModel() 
     }; 

     // Get user repository 
     var userRepository = new UsersRepository(); 

     // Get specific user 
     var userInformation = userRepository.GetById(id); 

     // Fill model fields 
     bundleModel.WijzigGebruikersModel.GebruikersId = id; 
     bundleModel.WijzigGebruikersModel.Voornaam = userInformation.Voornaam; 
     bundleModel.WijzigGebruikersModel.Achternaam = userInformation.Achternaam; 
     bundleModel.WijzigGebruikersModel.AdresToevoeging = userInformation.AdresToevoeging; 
     bundleModel.WijzigGebruikersModel.BeveilingsAntwoord = userInformation.BeveilingsAntwoord; 
     bundleModel.WijzigGebruikersModel.BeveilingsVraagId = userInformation.BeveilingsVraag; 
     bundleModel.WijzigGebruikersModel.Email = userInformation.Email; 
     bundleModel.WijzigGebruikersModel.Huisnummer = userInformation.Huisnummer; 
     bundleModel.WijzigGebruikersModel.LandId = userInformation.Land; 
     bundleModel.WijzigGebruikersModel.Woonplaats = userInformation.Woonplaats; 
     bundleModel.WijzigGebruikersModel.Straat = userInformation.Straat; 
     bundleModel.WijzigGebruikersModel.Postcode = userInformation.Postcode; 
     bundleModel.WijzigGebruikersModel.LandenList = userRepository.GetLanden(userInformation.Land); 
     bundleModel.WijzigGebruikersModel.BeveilingsVragenList = userRepository.GetBeveilingsVragen(userInformation.BeveilingsVraag); 
     bundleModel.WijzigGebruikersModel.GroepenList = userRepository.GetGroepen(userInformation.GroepID); 
     bundleModel.PasswordModel.GebruikersId = id; 

     // Return model 
     return View(bundleModel); 
    } 

預先感謝幫助我,總是不勝感激!

+1

你可能想看看NHibernate的,我認爲這會做你想要做的事。我無法確切地告訴你在這裏做什麼。 – danielcooperxyz

+0

不知道爲什麼我被低估了,我盡力解釋我想做什麼。請向我解釋我做錯了什麼或者你不明白什麼。 – Jamie

+2

@Jamie - 我認爲你在這篇文章中的標題並不真正轉化爲你的文章內容。也許這可能是人們拒絕這一點的原因。正如D4nC00per在他的帖子中所說的,並不能真正告訴你在這裏做什麼。 – Gjohn

回答

1

但我只是想只返回倉庫

上查看返回userRepository,而不是bundleModel可能會迫使你寫上觀邏輯(例如userRepository.GetById((int)ViewContext.RouteData.Values["id"])我建議你不要使用此因爲它違反了MVC模式的主要意圖 - 分離問題。

所以我現在在這個例子中做的是用我的倉庫的信息填充我的模型,所以我可以稍後再驗證它。但我只想返回存儲庫,我不確定這是否可能,但我很確定它是。

  1. 如果你想簡化bundleModel的創作,你可以使用Automapper

    var bundleModel = new Models.BundleGebruikersPasswordModel 
    { 
        WijzigGebruikersModel = new Models.WijzigGebruikersModel() { GebruikersId = id }, 
        PasswordModel = Mapper.Map<User, Models.WijzigGebruikersModel>(userRepository.GetById(id)) 
    }; 
    

    甚至

    var bundleModel = Mapper.Map<User, Models.BundleGebruikersPasswordModel>(userRepository.GetById(id)); 
    

    但是,你應該多讀有關配置Automapper。

  2. 如果你想避免視圖模型的使用Models.WijzigGebruikersModelModels.PasswordModel可以使用ensted他們的User實體。 但是我不會推薦這個解決方案,因爲你的視圖在這種情況下知道你的域模型。

    // Return model 
    return View(userRepository.GetById(id)); 
    

有與在ASP最佳實踐的幾個很好的聯繫。淨MVC

  1. 12 ASP.NET MVC Best Practices
  2. Best Practices for ASP.NET MVC
  3. Best MVC Practices
+1

感謝您的回覆,第一個鏈接應該幫助我很多。 (http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx) – Jamie

相關問題