2011-01-19 3 views
0

新規作成、私はMVC 2 C#を初めて使用し、LINQでEntityFrameworkを使用しています。コントローラのUpdateModelを呼び出すのはMVCパターンですか?モデルレイヤーで同じことをどうすればできますか?

多くの例(MicrosoftのMVC 2 MusicStoreを含む)では、データベースの更新がコントローラレイヤーで行われていることに気付きました。たとえば、ProductModel(Product、 "Products")を呼び出し、ProductControllerクラスのSaveChanges()を呼び出すデータベース製品を更新する場合

ok、シンプルで簡単ですが、は次のMVC "traditional"パターンです ??

この代わりに、私はProductModelクラスに責任を委譲してみてください(私が追加とAutoMapperと削除の成功とそれを作った)が、私は私が何かをしようとしたモデル から更新する方法を見つけることができません。以下のような

 Mapper.CreateMap<Product, ProductModels>(); 
     Mapper.CreateMap<ProductModels, Product>(); 
     var p = Mapper.Map<Product, ProductModels>(prod); 

     productosBD.AttachTo("Products", p); 
     productosBD.SaveChanges(); 

が、決して...

は、誰かがどのように私はモデル層内のエンティティを更新することができますを教えてもらえ?? 2と3がはるかに似ていますが、事前に

おかげ

答えて

1

は、ASP NET MVCは、バージョン2と今、バージョン3にバージョン1のベータ版から多くのことを進化してきました。

このようなサンプルの多くは、MVC 1に関連しています。私は難しい方法を学んだことがあります。私はかなりASP NET MVCには新しいですが、MVC 2でModelBinderをモデル化してモデルを更新すると、通常はメソッドシグネチャをモデルとして定義すると、UpdateModelを呼び出す必要はありません。例えば

:あなたはこのようにそれを定義した場合

public ActionResult Create(MyModel model) 
{ 
     ... // no need to call UpdateModel 

はしかし、その後、あなたがそれを実行する必要があります。更新が発生した場所の面では

public ActionResult Create(int id, FormCollection collection) 
{ 
     MyModel model = Repository.Get(id); // in your case EF productosBD.Where(x=>x.Id = id) 
     UpdateMode(model, collection); 
     Repository.Save(model); 

、はい、それはに起こるのだろうあなたのコントローラーがリポジトリーパターンを使用するか、またはベアデータベースコンテキストを使用するかによって異なります。私は個人的にはServiceProxyを使用して、Managerと話しているWCFサービスに話します。を使用します。

+0

私はModelBinderがASP.NET MVC 1で同じことをしたと思います。 – Omar

+0

MVC 1は使用しませんでしたが、MVC 1で見たすべての例ではUpdateModelが使用されています。 – Aliostad

+0

私はObjectStateManager.ChangeObjectState(p、System.Data.EntityState.Modified)を呼び出す必要があります。 EntityStateを変更するように設定します。そこでこれをモデルレイヤーに追加し、上記のようにコントローラーを変更しましたが、これはObjectStateManager.ChangeObjectStateの行のEdit.aspxビューにNullReferenceExceptionを表示しています。何が起こっているの任意のアイデア? – Msam85

関連する問題