项目使用多层,把数据库访问层,单独放到DAL层里
一:新建好项目与类库, 并添加好EF依赖
然后在dll层添加好ef的依赖,可以使用Nuget包下载,我们这里使用在DAL.csproj里边配置依赖
自动下载 Microsoft.EntityFrameworkCore.SqlServer
自动下载完依赖后可以在依赖项中看到
二:在DAL层添加好model与上下文对象
Users.cs:
public class Users
{
public int Id { get; set; }
public string UserName { get; set; }
public string Address { get; set; }
public int Age { get; set; }
}
MyDataContext:
public class MyDataContext : DbContext
{
public MyDataContext(DbContextOptions<MyDataContext> options)
: base(options)
{
}
public DbSet<Users> Users { get; set; }
}
三:在第一层中添加好EF的依赖注入
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
//添加ef的依赖
var connection = "server=.;uid=sa;pwd=123456;database=codefirst";
services.AddDbContext<MyDataContext>(options => options.UseSqlServer(connection));
services.AddMvc();
}
第一层中也需要引用名称空间 using Microsoft.EntityFrameworkCore
因为UseSqlServer这个扩展方法是在这个依赖里边的
四:使用命令通过代码生成数据库
先输入:Add-Migration MyFirstMigration(名字)
在输入:Update-Database
执行成功后就会更具你配置的连接字符串与model去生成数据库
执行命令可能遇到的错误
这个是因为执行这个命令还需要一个依赖,在DAL.cspoj中配置好就行
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />
五:直接在控制器中使用EF
private MyDataContext _context;
public HomeController(MyDataContext context) //依赖注入得到实例
{
_context = context;
}
public IActionResult Index()
{
//使用ef添加一条数据
Users us = new Users();
us.UserName = "xp";
us.Age = 26;
us.Address = "jk";
_context.Users.Add(us);
_context.SaveChanges();
return View();
}
六:在DAL层中使用EF
操作数据库的还是应该放到数据库访问层,而不是直接在控制器里边去写
在DAL层中添加接口IUserDAL
public interface IUserDAL
{
void Insert();
}
UserDAL 中去实现IUserDAL并使用EF操作数据库
public class UserDAL: IUserDAL
{
private MyDataContext _context;
public UserDAL(MyDataContext context) //依赖注入得到ef实例
{
_context = context;
}
public void Insert()
{
//使用ef添加一条数据
Users us = new Users();
us.UserName = "xp";
us.Age = 26;
us.Address = "jk";
_context.Users.Add(us);
_context.SaveChanges();//保存到数据库
}
}
Startup.cs中配置好DAL层的依赖注入关系
services.AddTransient<IUserDAL,UserDAL>();
控制器中借助DAL层去实现数据库访问
private IUserDAL _iud;
public HomeController(IUserDAL iud) //依赖注入得到DAL层实例
{
_iud = iud;
}
public IActionResult Index()
{
//添加数据
_iud.Insert();
return View();
}