基于模板文件的实体框架代码生成器

在软件开发过程中,数据访问层的代码往往是重复且繁琐的。为了提高开发效率,减少重复劳动,可以使用实体框架(Entity Framework)代码生成器来自动生成数据层类。本文将介绍如何使用这种工具来连接SQL Server数据库,并生成基本的数据层类,以便在项目中实现和使用。

连接到SQL Server

首先,需要建立与SQL Server的连接。这通常涉及到配置数据库连接字符串,以及确保数据库服务器可以被应用程序访问。

string connectionString = "Data Source=服务器地址;Initial Catalog=数据库名;User ID=用户名;Password=密码"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 连接成功 }

代码生成器的使用

在建立了数据库连接之后,接下来就可以使用代码生成器了。需要输入一些与项目相关的变量,选择一个表,指定主键列,以及排序方式,然后点击“生成类”按钮。

生成器会根据选择的表或视图,生成一些默认的方法。例如,如果表中包含“DELETED”、“CREATED”、“UPDATED”(它们都是datetime类型)这样的列,生成器会决定需要生成哪些代码。

对于表,生成器可能会生成以下方法:

  • 创建记录(Create)
  • 更新记录(Update)
  • 按ID删除记录(DeleteById)
  • 按ID删除记录(DropById)
  • 按ID获取记录(GetById)
  • 获取记录列表(GetList)
  • 清除标记为已删除的记录(CleanMarkedAsDeleted)

对于视图,生成器可能会生成以下方法:

  • 按ID获取记录(GetById)
  • 获取记录列表(GetList)

附加选项

除了基本的代码生成功能,还有一些附加选项:

  • 生成DatabaseException类,这个类在项目中只需要生成一次。
  • 为MVC项目生成一个获取SelectList的类,这在填充视图中的组合框和列表时非常有用。

在目标项目中使用生成的代码

一旦将生成的类集成到EF项目中,就可以像下面这样使用它们了。

// 获取所有VEREIN对象的列表 List<VEREIN> lst = EF.Verein.GetList(); // 获取一个特定的VEREIN对象 Guid id = new Guid("7125A5EA-25EA-4C3F-A123-415506246359"); VEREIN verein = EF.Verein.GetByID(id);

异常处理

生成的类将需要DatabaseException类,可以在需要时填充事件。生成的异常类如下:

using System; using System.Runtime.Serialization; [Serializable] public class DatabaseException : Exception { public DatabaseException(string message) : base(message) { } public DatabaseException(string message, Exception innerException) : base(message, innerException) { } public DatabaseException(string format, params object[] args) : base(string.Format(format, args)) { } protected DatabaseException(SerializationInfo info, StreamingContext ctxt) : base(info, ctxt) { } }

SelectList生成

对于MVC(ASP.NET MVC)项目,生成的代码将返回一个填充了所有VEREIN记录(ID和名称)的MVC List<SelectListItem>,用于组合框。

using System; using System.Collections.Generic; using System.Linq; using TestProject.Models; using System.Web.Mvc; public static List<SelectListItem> GetList() { try { List<SelectListItem> sellist = new List<SelectListItem>(); using (EFDataClassGeneratorEntities model = new EFDataClassGeneratorEntities()) { var list = model.VEREIN.OrderBy(w => w.VEREIN_NAME).ToList(); foreach (VEREIN item in list) { sellist.Add(new SelectListItem { Value = item.VEREIN_ID.ToString(), Text = item.VEREIN_NAME }); } return sellist; } } catch (Exception ex) { throw new DatabaseException("A database exception occurred", ex); } }

不是企业级开发者,别人的代码总是有这样那样的问题。可以将这个示例作为灵感,随意修改源代码,编辑模板文件,做想做的任何事情。但请不要批评编码方式。任何其他反馈都非常欢迎。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485