使用VS 2017 创建.net Core 项目(MVC + 三层 + EF Core + 依赖注入)

创建.NET Core MVC项目

1. 创建.NET Core Web 项目

在新建项目中选择 Visual C# 下 .NET Core 中的 ASP.NET Core Web 应用程序。
修改名称、位置及解决方案名称。

2. 注册MVC组件

打开Starup.cs文件,在 ConfigureServices 下注册MVC服务

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

在 Configure 中添加路由

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseMvc((RouteBuilder) =>
            {
                RouteBuilder.MapRoute("default", "{Controller}/{Action}/{Parameter}",
                    new { @Controller = "Home", @Action = "Index", @Parameter = String.Empty });
            });
        }

Startup 类 :参考文档
IServiceCollection :参考文档
IApplicationBuilder:参考文档

3. 创建MVC页面

创建 Controllers、Models、Views 三个文件夹
在这里插入图片描述
在Views中添加 _Layout.cshtml_ViewStart.cshtml 两个文件。
_Layout.cshtml :布局页 添加@RendBody()
_ViewStart.cshtml:点击添加视图=》引用布局页_layout.cshtml
_layout.cshtml是在呈现view时运行的,可以理解为,在加载view之前先运行这个。
添加MVC空控制器 创建视图、浏览测试。
创建完视图页后添加控制器 重新生成项目。
在这里插入图片描述

4. 注册依赖注入

使用依赖注入 主要涉及 4个文件 appsettings.jsonConfigSetting.csAppSettings.csAutoSetting.cs
文件目录
appsettings.json : .net Core 默认配置文件,取代了 .net 中config文件

{
  "ConnectionStrings": {
    "DefaultConnection": ""
  },
  "AppSettings": {
    "AssemblyStrings": [
      "MyProject.Service",     //业务逻辑层引用名称
      "MyProject.Repository" //数据访问层引用名称
    ]
  }
}

AppSettings.cs :配置文件映射类

public class AppSettings
    {
        public string ConnectionStrings { get; set; }
        public string[] AssemblyStrings { get; set; }
    }

ConfigSetting.cs :读取映射文件帮助类 来源于 Royal丶鬼才官方文档

 public class ConfigSetting
    {
        protected static readonly IConfiguration Configuration;
        static ConfigSetting()
        {
            Configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json", true)
               .Build();
        }
        /// <summary>
        /// 获取实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T GetSection<T>(string key) where T : class, new()
        {
            var obj = new ServiceCollection()
                .AddOptions()
                .Configure<T>(Configuration.GetSection(key))
                .BuildServiceProvider()
                .GetService<IOptions<T>>()
                .Value;
            return obj;
        }
        /// <summary>
        /// 获取单项
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetSection(string key)
        {
            return Configuration.GetValue<string>(key);
        }
    }

AutoSetting.cs :实现依赖注入 官方文档

public static class AutoSetting
    {
        public static void RegisterServices(this IServiceCollection services)
        {
            var _assemblys = ConfigSetting.GetSection<AppSettings>("AppSettings").AssemblyStrings;
            foreach (var _item in _assemblys)
            {
                var _list = Assembly.Load(_item);
                foreach (var _type in _list.GetTypes())
                {
                    foreach (var _interfaces in _type.GetInterfaces())
                    {
                        services.AddTransient(_interfaces, _type);
                    }
                }
            }
        }
    }

创建文件后 需要在 starup.cs 中 使用依赖注入方法

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.RegisterServices();
        }

搭建三层架构

1. 三层目录简介

Model/Entity :实体层 负责映射数据库中表字段(Model层是不属于三层架构中层级)

传统三层结构:DAL/Repository,BLL/Service,UI

DAL/Repository:数据访问层 负责执行数据库相关操作 (添加,修改,删除,查询)(引用:Model)
BLL/Service :业务逻辑层 负责承上启下作用 ,对具体问题进行逻辑判断与执行操作 (引用:DAL,Model)
UI/Web :表示层 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面(引用:BLL,Model)

根据项目大小 可以选择扩展相关接口层
三层架构扩展相关接口层: IDAL/IRepository,IBLL/IService 接口层

相关引用
DAL/Repository 引用 ModelIDAL/IRepository
BLL/Service 引用 Model,IBLL/IServiceDAL/RepositoryIDAL/IRepository
UI/Web 引用 Model,IBLL/IServiceBLL/Service

2. 添加类库

在解决方案右键选择 添加=》新建项目=》类库(.NET standard)
在这里插入图片描述

EF Core

1. 添加EF Core

打开工具=》管理NuGet =>管理解决方案的NuGet工具包
在这里插入图片描述
点击浏览:搜索 EF Core 将 Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools 添加到项目。

在添加EF Core 时需要注意相关版本信息需要与当前UI层版本一直 否则会报版本冲突
VS 2017 中默认使用.net Core 版本为 2.1.0

2. 创建SqlContext文件

在实体层添加类 :SqlContext.cs 并添加引用 using Microsoft.EntityFrameworkCore; 并输入相关信息

public class SqlContext : DbContext
    {
    	public SqlContext()
        {

        }
        public SqlContext(DbContextOptions<SqlContext> options)
            : base(options)
        {

        }
        //示例调用
        public DbSet<tb_User> tb_User { get; set; }
    }

2. 建立与数据库连接

在EF Core中建立连接数据库方法 可以在 DbContext 中查看,接下来在建立的SqlContext中重写连接数据库方法 OnConfiguring 关于 DbContextOptionsBuilder 参数点此 文档查看

public class SqlContext : DbContext
    {
        public SqlContext()
        {

        }
        public SqlContext(DbContextOptions<SqlContext> options)
            : base(options)
        {

        }
        public DbSet<tb_User> tb_User { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("数据库连接字符串");
            }
        }
    }
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例: 1. 创建一个 ASP.NET MVC 项目 2. 在 Models 文件夹下创建一个名为 User.cs 的类,表示用户模型: ```csharp public class User { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } public string Email { get; set; } } ``` 3. 在 Controllers 文件夹下创建一个名为 UserController.cs 的控制器,用于处理用户相关的逻辑: ```csharp public class UserController : Controller { private readonly ApplicationDbContext _context; public UserController(ApplicationDbContext context) { _context = context; } // GET: User public ActionResult Index() { var users = _context.Users.ToList(); return View(users); } // GET: User/Create public ActionResult Create() { return View(); } // POST: User/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(User user) { if (ModelState.IsValid) { _context.Users.Add(user); _context.SaveChanges(); return RedirectToAction("Index"); } return View(user); } // GET: User/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } var user = _context.Users.Find(id); if (user == null) { return HttpNotFound(); } return View(user); } // POST: User/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(User user) { if (ModelState.IsValid) { _context.Entry(user).State = EntityState.Modified; _context.SaveChanges(); return RedirectToAction("Index"); } return View(user); } // GET: User/Delete/5 public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } var user = _context.Users.Find(id); if (user == null) { return HttpNotFound(); } return View(user); } // POST: User/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { var user = _context.Users.Find(id); _context.Users.Remove(user); _context.SaveChanges(); return RedirectToAction("Index"); } // GET: User/Login public ActionResult Login() { return View(); } // POST: User/Login [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(string name, string password) { var user = _context.Users.FirstOrDefault(u => u.Name == name && u.Password == password); if (user == null) { ModelState.AddModelError("", "用户名或密码错误"); return View(); } Session["UserId"] = user.Id; return RedirectToAction("Index"); } // GET: User/Logout public ActionResult Logout() { Session.Clear(); return RedirectToAction("Index"); } } ``` 4. 创建视图文件夹,分别在 Views/User 文件夹下创建 Index.cshtml、Create.cshtml、Edit.cshtml、Delete.cshtml、Login.cshtml 文件,用于展示用户列表、添加用户、编辑用户、删除用户和登录页面。 5. 在 Startup.cs 中配置数据库连接: ```csharp public void ConfigureServices(IServiceCollection services) { // ... services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); // ... } ``` 6. 在 appsettings.json 中配置数据库连接字符串: ```json { "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" }, // ... } ``` 7. 运行项目,即可进行增删改查和登录操作。 注意:上述示例中使用了 Entity Framework Core 进行数据访问,需要先安装 Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools NuGet 包。另外,为了简化示例,没有进行身份验证和授权,实际项目中需要进行身份验证和授权才能保证数据安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值