65.9K
CodeProject 正在变化。 阅读更多。
Home

用于数据层的 C# Entity Framework 类生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (13投票s)

2017年7月2日

CPOL

2分钟阅读

viewsIcon

36768

downloadIcon

1866

每当您使用实体框架开发项目时,您都需要创建一个数据层类,使用不同的方法访问模型中的每个对象。这个生成器会为您完成这项工作。

引言

我为自己编写了这个工具,使用基于模板文件的实体框架创建数据层类。它连接到 SQL 服务器并读取表、视图及其列。只需点击一下,它就会生成您可以实现到您的项目中的基本数据层类。

您可以修改代码模板文件(已包含),将其翻译成 VB 或添加您缺少的​​方法。

连接到 SQL 服务器

首先,需要建立与您的 SQL 服务器的连接。

代码生成器

现在,您输入一些与项目相关的变量,选择一个表,选择主键列和排序方式,然后单击“生成类”。瞧。

生成的方法

在模板文件中,生成了一些默认方法。如果您的表包含“DELETED”、“CREATED”、“UPDATED”(它们都是日期时间)之类的列,此生成器将决定需要生成哪一行。

示例:您有一个列“DELETED”(日期时间)用于标记删除时的记录,此生成器会检测到这一点。

将为表生成以下方法

  • 创建 (记录)
  • 更新 (记录)
  • DeleteById (记录)
  • DropById (记录)
  • GetById (记录)
  • GetList (记录列表)
  • CleanMarkedAsDeleted (删除标记为删除的记录)

将为视图生成以下方法

  • GetById (记录)
  • GetList (记录列表)

附加组件

有两个额外的选项可用

  • 生成 DatabaseException 类,该类只需要在每个项目中生成一次。
  • 生成一个类,用于获取 MVC 项目的 SelectList。您可以在您的 ViewModel 中非常轻松地使用它来使用数据填充组合框和列表。

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

一旦您将生成的类实现到您的 EF 项目中,您就可以这样使用它。
一个基于模型对象 VEREIN 的示例

获取所有 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;

/// <summary>
/// Code generated 01.07.2017 09:50:23 by EFClassGenerator version 1.0.0.0
/// Template last modified 2017-06-23
/// </summary>

namespace TestProject
{
    [Serializable]
    public class DatabaseException : Exception
    {
        // Constructors
        public DatabaseException(string message)
            : base(message)
        {
        }
        public DatabaseException(string message, Exception innerException)
            : base(message)
        {
        }
        public DatabaseException(string format, params object[] args)
        : base(string.Format(format, args))
        {
        }

        // Ensure Exception is Serializable
        protected DatabaseException(SerializationInfo info, StreamingContext ctxt)
            : base(info, ctxt)
        {
        }
    }
}

SelectList

仅适用于 MVC (ASP) 项目,但对在视图中填充组合框非常有帮助。
此生成的代码将返回一个 MVC List<SelectListItem>,其中填充了所有 VEREIN 记录(ID 和 Name),用于组合框。

using System;
using System.Collections.Generic;
using System.Linq;
using TestProject.Models;
using System.Web.Mvc;

/// <summary>
/// Code generated 01.07.2017 15:44:16 by EFClassGenerator version 1.0.0.0
/// Template last modified 2017-06-23
/// </summary>

namespace TestProject.EF
{
    class SelList_Verein
    {
        private const string exceptionMessage = "A database exception occurred";

        /// <summary>
        /// Returns a SelectListItem list of model objects out of database
        /// </summary>
        /// <returns> A list of SelectListItem - List of model object</returns>
        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(exceptionMessage, ex);
            }
        }
    }
}

来源

我不是企业开发人员,而且除了您自己的代码外,其他人的代码总是有一些错误。将此示例作为灵感。随意更改源代码,编辑模板文件,做您想做的事情。

但是,请不要批评编码方式。

任何其他反馈都非常受欢迎。

历史

我将自己增强这个项目。我猜想以后的版本不会再由我发布在这里了。

2017/07/20

更新了源代码并修复了一些错误

© . All rights reserved.