.net core sqlite ef(使用webapi)

建议使用visual studio2017或rider(visual studio低版本不支持.net core2),rider的步骤与visual studio一样操作,这里我的dotnet版本是2.1.201

首先新建项目,选择.NET Core ->ASP.NET Core Web Application ->Web API

项目构建好后添加nuget包:Microsoft.EntityFrameworkCore.Sqlite 和 Microsoft.EntityFrameworkCore.Tools,安装好后如下:

image.png

这里使用Entity FrameWork的codefirst,所以新建实体类和DbContext:

namespace netCoreApi1
{
   public class User
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { set; get; }
        [MaxLength(50), Required]
        public string Name { set; get; }
    }
    class MyContext : DbContext
    {
        public DbSet Set_User { set; get; }
        protected override void OnConfiguring(DbContextOptionsBuilder  optionsBuilder)
        {
            string cntString = "Data Source=MyTestDb.db";
            optionsBuilder.UseSqlite(cntString);
        }
    }
}

这里User是实体类,字段可以添加相应注解(建议添加主键,未添加主键的实体类未测试)。
MyContext继承自DbContext,DbSet会对应生成数据库的表。
在OnConfiguring方法中将连接字符创设置到UseSqlite方法中。

接下来在Startup.cs中的ConfigureServices方法中进行如下配置:

services.AddDbContext();

另外可以在program.cs中配置端口号,在BuildWebHost方法中添加:(不配置默认是http://localhost:5000)

.UseUrls("http://0.0.0.0:5555")

在修改项目目录下的{projectname}.csproj文件,将DotNetCliToolReference标签改为:


否则 dotnet 的 ef 命令将不可用

接着在powershell或者cmd中进入到项目目录(非解决方案目录,是项目目录)
依次执行如下命令:

dotnet restore
dotnet ef migrations add InitialCreate
dotnet ef database update

之后会在之前配置连接字符串相应位置生成一个对应的sqlite数据库文件,这里我手动写入相应的数据到数据库,
之后再controller中获取数据库中数据,修改get方法:

[HttpGet("users")]
public List Get()
{
     using(MyContext context = new MyContext()){
         var users = context.Set_User.ToList();
         return users;
     }
}

这里默认返回的数据格式是json
构建 运行此项目,在浏览器中输入http://localhost:5555/api/values/users ,即可调用api

在发布时需注意:
1、在visual studio中右击生成的数据库文件,选择属性,将“复制到输出目录”选项设置为“始终复制” 保存(目测rider不支持此项)
如果不设置,可在发布后手动将数据库文件复制到相应目录,否则没有数据库,运行时会出错!
2、在发布后运行有可能会出现 清单文件相关的报错,解决方案是:配置{projectname}.proj,在 标签中添加如下配置:

false

重新构建后再发布即可
3、高版本的dotnet可能代码略有不同,而且默认使用https可能会导致无法访问,这里禁用https注释掉startup.cs中Configure方法中的如下代码

       // app.UseHttpsRedirection();

4、高版本的dotnet可能不需要如下配置:
在修改项目目录下的{projectname}.csproj文件,将DotNetCliToolReference标签改为:


5、跨域
在startup.cs的Configure方法中添加:

 app.UseCors(builder =>
        {
            builder.AllowAnyHeader();
            builder.AllowAnyMethod();
            builder.AllowAnyOrigin();
        });

若上述方法无效,则使用此方法:
NuGet添加Microsoft.AspNetCore.Cors
在startup.cs的ConfigureServices方法中添加:

//配置跨域处理
services.AddCors(options =>
{
    options.AddPolicy("any", builder =>
    {
        builder.AllowAnyOrigin() //允许任何来源的主机访问        
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials();//指定处理cookie      
     });
});

在控制器或方法上加注解: [EnableCors("any")]
参考:https://www.cnblogs.com/tianma3798/p/6920704.html

ps:windows平台安装.net core :https://www.microsoft.com/net/download/windows
linux系列平台可根据微软相关教程:https://www.microsoft.com/net/download/linux
若安装不成功;可手动下载配置: https://www.microsoft.com/net/download/all

你可能感兴趣的:(.net core sqlite ef(使用webapi))