2009-02-03 11 views
7

मेरे सिर कुछ MVC और Linq का उपयोग कर मूल सिद्धांतों दौर प्राप्त करने के लिए मैं करने के लिए एक रूपांतरण पर काम कर रहा हूँ SQL करने के लिए स्टीफन वाल्थर के TaskList application:MVC बल्क संपादन - एसक्यूएल सूची सहेजें Linq

मैं एक थोक प्रणाली संपादित करें का उपयोग कर जोड़ रहा Steve Sanderson's blog में वर्णित अवधारणाएं।

यह सभी अपेक्षित काम करता है, हालांकि, मुझे अपनी लौटाई गई सूची की बचत में समस्या हो रही है। मेरी थोक सूची में पोस्ट लौटाई गई सूची के माध्यम से loops और कार्य की मेरी LinqToSql डीबी सूची में प्रत्येक आइटम अद्यतन।

मेरे BulkEdit दृश्य ViewPage<List<TaskList.Models.Task>> विरासत और इस प्रकार है:

<% 
using (Html.BeginForm()) 
{ 
%> 
     <div id="items"> 

<% 
      foreach (var task in ViewData.Model) 
      { 
       Html.RenderPartial(
        "TaskEditor", 
        task, 
        new ViewDataDictionary(ViewData) 
          { 
           {"prefix", "tasks"} 
          } 
       ); 
      } 
%> 

     </div> 

     <input type="submit" value="Save changes" /> 

<% 
    } 
%> 

TaskEditor नियंत्रण System.Web.Mvc.ViewUserControl<Models.Task> विरासत और इस तरह दिखता है:

<div> 
<%= Html.Hidden(ViewData["prefix"] + ".index", ViewData.Model.Id) %> 

<% var fieldPrefix = string.Format("{0}[{1}].", ViewData["prefix"], ViewData.Model.Id); %> 

<%= Html.Hidden(fieldPrefix + "Id", ViewData.Model.Id) %> 
Description: 
<%= Html.TextBox(fieldPrefix + "TaskDescription", ViewData.Model.TaskDescription)%> 
Date: 
<%= Html.TextBox(fieldPrefix + "EntryDate", ViewData.Model.EntryDate.ToString("o"))%> 
Completed: 
<%= Html.CheckBox(fieldPrefix + "IsCompleted", ViewData.Model.IsCompleted)%> 
</div> 

नियंत्रक जाओ और पोस्ट तरीके इस प्रकार हैं:

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult BulkEdit() 
    { 
     var tasks = from t in db.Tasks orderby t.EntryDate descending select t; 

     return View(tasks.ToList()); 
    }   

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult BulkEdit(IList<Task> tasks) 
    { 
     foreach(Task task in tasks) 
     { 
      foreach(Task dbTask in db.Tasks) 
      { 
       if (dbTask.Id == task.Id) 
       { 
        dbTask.TaskDescription = task.TaskDescription; 
        dbTask.EntryDate = task.EntryDate; 
        dbTask.IsCompleted = task.IsCompleted; 
       } 
      } 
     } 

     db.SubmitChanges(); 

     return RedirectToAction("Index"); 
    } 

मेरा सवाल है, यह भी लगता है जटिल और मैंने अभी तक सूची में जोड़े गए या हटाए गए कार्यों के लिए जिम्मेदार नहीं ठहराया है। मुझे क्या करना पसंद करेंगे

db.Tasks = tasks; 

की तरह कुछ है और Linq बाहर काम करने के कौन-कौन से बदल दिया है और कौन-से नए/पुराने हैं अपने सभी जादू करते हैं।

क्या यह संभव है? या क्या मैं जल्द ही लिंक से थोड़ा अधिक उम्मीद कर रहा हूं?

उत्तर

3

आप इस तथ्य LINQ एसक्यूएल के लिए कोई बहु स्तरीय कहानी है कि के साथ काम कर रहे हैं। मुझे लगता है कि यह आपके लिए क्या देख रहे हैं:

http://blog.irm.se/blogs/eric/archive/2008/08/20/Go-Distributed-With-LINQ-to-SQL.aspx

मर्ज विधि है कि इस आदमी को प्रस्तुत करता है आसानी से DataContext वर्ग के एक "विस्तार विधि" में तब्दील किया जा सकता है और यह लगभग बस इसे जैसा होगा LINQ से SQL में सही बनाया गया था। मैं लगभग इसलिए कहता हूं क्योंकि इसका उपयोग करने के लिए आपको अपनी एक्सटेंशन विधि कहां स्थित है, उस नामस्थान को शामिल करना होगा।

0

मुझे लगता है कि आपको जो चाहिए वह देखने के लिए आपको एक दृश्य का उपयोग करने पर विचार करना चाहिए। वस्तुओं को पकड़ने के लिए ObservebleCollection संग्रह और उसके बाद आप उस संग्रह के दृश्य में अपनी सूची में बाध्यकारी हो सकते हैं, आपको अभी भी आइटम जोड़ने और हटाने के मामलों को संभालने की आवश्यकता होगी, लेकिन आप एक आईबींडिंगलिस्ट का भी चयन कर सकते हैं जो आपको देगा एक बाध्यकारी सूची चयन करें जो डीबी को अपडेट करेगा, आपको केवल इतना करना है कि AddNew() CommitNew() और अन्य दृश्यों को कॉल करें।

HTH, एरिक

संबंधित मुद्दे