zoukankan      html  css  js  c++  java
  • MVC3.0 EF增删改查的封装类

    本人亲身使用EF CodeFirst,因为增删改查都是使用EF内置的一些方法,我想把它封装到一个类调用就行了。结合网上的资料和自己的整理,若有不对的地方望斧正,感激不尽。直接上代码吧。我就用新闻的增删改查做例子。

    这是项目的整个结构图:

    Views文件夹的文件

    1.先看Index.cshtml页面的代码把

    Index.cshtml(列表页面)

    @model IEnumerable<NewsMvc.Models.News>
    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>首页</title>
        <style type="text/css">
            body
            {
                font-size: 12pt;
            }
            a
            {
                text-decoration:none;
            }
        </style>
    </head>
    <body>
        <p>
            @Html.ActionLink("添加", "Create")
        </p>
        <table>
            <tr>
                <th>
                    标题
                </th>
                <th>
                    添加人
                </th>
                <th>
                    内容
                </th>
                <th>
                    添加时间
                </th>
                <th>
                </th>
            </tr>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.Title)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.AddUser)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Content)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.AddDate)
                    </td>
                    <td>
                        @Html.ActionLink("编辑", "Edit", new { id = item.Id }) |
                        @Html.ActionLink("查看", "Details", new { id = item.Id }) |
                        @Html.ActionLink("删除", "Delete", new { id = item.Id })
                        <a href="News/Edit/@item.Id">编辑</a>
                        <a href="News/Delete/@item.Id" onclick="return confirm('删除后无法恢复,是否删除?')">X</a>
                    </td>
                </tr>
            }
        </table>
    </body>
    </html>

    2.Create.cshtml(添加页面)。这里引用了一个日历控件,链接:http://www.my97.net/dp/down.asp

    <!DOCTYPE html>
    <html>
    <head>
        <title>添加新闻</title>
        <script src="../../Scripts/datePicker/WdatePicker.js" type="text/javascript"></script>
    </head>
    <body>
        <form method="post">
        <fieldset>
            <legend>新闻信息</legend>
            <div class="editor-label">
                标题
            </div>
            <div class="editor-field">
                <input type="text" id="news_title" name="news_title" />
            </div>
            <div class="editor-label">
                添加人
            </div>
            <div class="editor-field">
                <input type="text" id="news_adduers" name="news_adduers" />
            </div>
            <div class="editor-label">
                内容
            </div>
            <div class="editor-field">
                <input type="text" id="news_content" name="news_content" />
            </div>
            <div class="editor-label">
                添加时间
            </div>
            <div class="editor-field">
                <input type="text" id="news_adddate" name="news_adddate" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',readOnly:true})" />
            </div>
            <p>
                <input type="submit" value="添 加" />
            </p>
            <div>
                @Html.ActionLink("返回列表", "Index")
                <a href="Index">返回列表</a>
            </div>
        </fieldset>
        </form>
    </body>
    </html>

    3. Edit.cshtml(修改页面)

    @model NewsMvc.Models.News
    
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>Edit</title>
    </head>
    <body>
        <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
        <script src="../../Scripts/datePicker/WdatePicker.js" type="text/javascript"></script>
        
        @using (Html.BeginForm()) {
            @Html.ValidationSummary(true)
            <fieldset>
                <legend>News</legend>
        
                @Html.HiddenFor(model => model.Id)
        
                <div class="editor-label">
                    @Html.LabelFor(model => model.Title)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Title)
                    @Html.ValidationMessageFor(model => model.Title)
                </div>
        
                <div class="editor-label">
                    @Html.LabelFor(model => model.AddUser)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.AddUser)
                    @Html.ValidationMessageFor(model => model.AddUser)
                </div>
        
                <div class="editor-label">
                    @Html.LabelFor(model => model.Content)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Content)
                    @Html.ValidationMessageFor(model => model.Content)
                </div>
        
                <div class="editor-label">
                    @Html.LabelFor(model => model.AddDate)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.AddDate, new { onfocus = "WdatePicker({dateFmt:'yyyy-MM-dd',readOnly:true})" })
                    @Html.ValidationMessageFor(model => model.AddDate)
                </div>
        
                <p>
                    <input type="submit" value="Save" />
                </p>
            </fieldset>
        }
        
        <div>
            @Html.ActionLink("Back to List", "Index")
        </div>
    </body>
    </html>

    Models的文件:

    1.News.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    namespace NewsMvc.Models
    {
        public class News
        {
            [Display(Name = "编号")]
            public int Id { get; set; }
            [Required(ErrorMessage = "标题必填")]
            [Display(Name = "标题")]
            public string Title { get; set; }
            [Display(Name = "添加人")]
            public string AddUser { get; set; }
            [Display(Name = "内容")]
            public string Content { get; set; }
            [Display(Name = "添加时间")]
            [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
            public DateTime AddDate { get; set; }
            [Display(Name = "备注")]
            public string Remark { get; set; }
            public string tes { get; set; }
        }
    }

    2.NewsDbContent.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    
    namespace NewsMvc.Models
    {
        public class NewsDbContent : DbContext
        {
            public DbSet<News> Newss { get; set; }
            public DbSet<NewsType> NewsTypes { get; set; }
        }
        
    }

    3.BaseOption.cs(重点来了,这就是封装了EF的增删改查的公共类)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    
    namespace NewsMvc.Models
    {
        public class BaseOption<T> where T : class
        {
            NewsDbContent ns_db = new NewsDbContent();
            //添加
            public void Add(T entity)
            {
                ns_db.Entry<T>(entity).State = EntityState.Added;
                ns_db.SaveChanges();
            }
            //修改
            public void Update(T entity)
            {
                ns_db.Set<T>().Attach(entity);
                ns_db.Entry<T>(entity).State = EntityState.Modified;
                ns_db.SaveChanges();
            }
            //删除   
            public void Delete(params object[] keyValues)
            {
                T t = FindById(keyValues);
                ns_db.Set<T>().Attach(t);
                ns_db.Entry<T>(t).State = EntityState.Deleted;
                ns_db.SaveChanges();
            }
            //查询集合
            public List<T> getlist(T entity)
            {
                return ns_db.Set<T>().ToList();
            }
            //根据Id返回查询的集合
            public T FindById(params object[] keyValues)
            {
                return ns_db.Set<T>().Find(keyValues);
            }
        }
    }

    如何使用这个呢,以下是例子:

    Controllers文件夹下的文件

    NewsController.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using NewsMvc.Models;
    using System.Text;
    namespace NewsMvc.Controllers
    {
        public class NewsController : Controller
        {
            BaseOption<News> bs = new BaseOption<News>();
            //列表页面
            public ActionResult Index()
            {
                News ns = new News();
                return View(bs.getlist(ns));
            }
            //添加
            public ActionResult Create()
            {
                return View();
            }
            //添加
            [HttpPost]
            public ActionResult Create(News ns)
            {
                ns.Title = Request.Form["news_title"].ToString().Trim();
                ns.AddUser = Request.Form["news_adduers"].ToString().Trim();
                ns.Content = Request.Form["news_content"].ToString().Trim();
                ns.AddDate = DateTime.Parse(Request.Form["news_adddate"].ToString().Trim());
                bs.Add(ns);
                return RedirectToAction("Index");
            }
            //修改
            News ns = new News();
            public ActionResult Edit(int id)
            {
                ns = bs.FindById(id);
                return View(ns);
            }
            //修改
            [HttpPost]
            public ActionResult Edit(News ns)
            {
                bs.Update(ns);
                return RedirectToAction("Index");
            }
            //删除
            public ActionResult Delete(int id)
            {
                bs.Delete(id);
                return RedirectToAction("Index");
            }
        }
    }

    Web.config文件

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=152368
      -->
    <configuration>
      <configSections>
    
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      </configSections>
      <appSettings>
        <add key="webpages:Version" value="1.0.0.0" />
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
      </appSettings>
      <connectionStrings>
        <add name="NewsDbContent" connectionString="Data Source=.;Initial Catalog=News;Integrated Security=true;" providerName="System.Data.SqlClient" />
      </connectionStrings>
      <system.web>
        <compilation debug="true" targetFramework="4.0">
          <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          </assemblies>
        </compilation>
        <authentication mode="Forms">
          <forms loginUrl="~/Account/LogOn" timeout="2880" />
        </authentication>
        <pages>
          <namespaces>
            <add namespace="System.Web.Helpers" />
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Web.WebPages" />
          </namespaces>
        </pages>
      </system.web>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
      </entityFramework>
    </configuration>

    Sql数据库代码:(本人使用的sa帐号登录的咯

    数据库名字:News

    news表代码:

    USE [News]
    GO
    /****** 对象:  Table [dbo].[News]    脚本日期: 08/26/2015 16:38:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[News](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Title] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
        [AddUser] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL,
        [Content] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL,
        [AddDate] [datetime] NOT NULL,
        [Remark] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL,
        [tes] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL,
     CONSTRAINT [PK_dbo.News] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

    由于不能上传项目,所以需要的留言给我吧。

  • 相关阅读:
    英文半字节压缩编码技术
    博弈翻硬币游戏
    POJ 2015 Permutation Code
    8051、ARM和DSP指令周期的测试与分析
    Huffman编码
    CentOS 命令提示符颜色及样式详解
    JAVA程序员面试32问
    面向抽象编程:接口和抽象类
    初学实用:实例讲解Java中的接口的作用
    C#和Java的区别
  • 原文地址:https://www.cnblogs.com/LoveQin/p/4760943.html
Copyright © 2011-2022 走看看