本文介绍EF配置DbContext已有实体类和数据库的详细方法,直接配置 DbContext 然后直接使用即可。详细可以从以下三个方面开始介绍:
1. 检查实体类
2. 配置 DbContext
3. 使用 DbCotnext 处理数据库数据
1. 手动创建或者从别处复制实体类
注意:
- 实体类 对应着 数据库中表
- 实体类可以手动编写,也可以由 EF 生成
- 实体类中字段可以比对应的数据表少字段
- 实体类中不允许存在对应数据库表没有的字段
如果 实体类中 存在 对应数据表中不存在的字段,会报如下错误
本次范例使用如下实体类如下
public partial class Article
{
public int ArticleId { get; set; }
public string ArticleTitle { get; set; }
public string ArticleContent { get; set; }
//浏览量
public int? ArticleViews { get; set; }
public DateTime? ArticlePublicationDate { get; set; }
public DateTime? ArticleLastModificationDate { get; set; }
//点赞数
public int? ArticleLikeCount { get; set; }
//逻辑删除
public int? DelFlag { get; set; }
//一篇文章,只有一个作者
public int UserId { get; set; }
//同一篇文章标签可以用多个,但通常只能属于一个分类;
public int SortId { get; set; }
}
2. 创建 DbContext
public class BlogContext:DbContext
{
// 从外部接收配置 使用有参构造函数
public BlogContext(DbContextOptions<BlogContext> options) : base(options)
{ }
// 实体类
public DbSet<Article> Articles { get; set; }
}
使用带参数的构造函数的DbContext ,需要在创建 DbContext 实例时,传入 DbContextOptions<TContext> 配置
var optionsBuilder = new DbContextOptionsBuilder<BlogContext>();
optionsBuilder.UseSqlite(@"Data Source=E:\MyBlogSqlite.db");
using (BlogContext blogContext = new BlogContext(optionsBuilder.Options))
{
//...
}
3.调用 DbContenxt 的范例
如下展示一些 使用 DbContext 的范例
【范例】返回数据中实体类数据行数
var optionsBuilder = new DbContextOptionsBuilder<BlogContext>();
optionsBuilder.UseSqlite(@"Data Source=E:\MyBlogSqlite.db");
using (BlogContext blogContext = new BlogContext(optionsBuilder.Options))
{
int result = blogContext.Articles.Count();
Console.WriteLine(result);
}
【范例】把数据从一个 DbContext 复制到 另一个 DbContext
//创建2个 DbContext
MyBlogContext myBlogContext = new MyBlogContext();
CurrentBlogContext currentBlogContext = new CurrentBlogContext();
//读取 myBlogContext 的所有 articles
//IQueryable<Article> articles = myBlogContext.Articles.Where(a => true);
IQueryable<Article> articles = myBlogContext.Articles;
//生成 CurrentArticle
List<CurrentArticle> list = new List<CurrentArticle>();
foreach (Article item in articles)
{
CurrentArticle currentArticle = new CurrentArticle();
currentArticle.ArticleTitle = item.ArticleTitle;
currentArticle.ArticleContent = item.ArticleContent;
currentArticle.ArticlePublicationDate = item.ArticlePublicationDate;
currentArticle.ArticleLastModificationDate = item.ArticleLastModificationDate;
currentArticle.SortId = 1;
currentArticle.UserId = 1;
list.Add(currentArticle);
}
//写入 CurrentArticle 到 currentBlogContext
foreach (CurrentArticle ca in list)
{
currentBlogContext.Articles.Add(ca);
}
//保存(重要)
currentBlogContext.SaveChanges();
【范例】修改 DbContext 数据
CurrentBlogContext currentBlogContext = new CurrentBlogContext();
IQueryable<CurrentArticle> currentArticles =
currentBlogContext.Articles.Where(a => a.ArticleId < 48);
foreach (var item in currentArticles)
{
item.SortId = 1;
item.UserId = 1;
currentBlogContext.Articles.Update(item);
}
currentBlogContext.SaveChanges();
【范例】对比 两个 DbContext 数据
MyBlogContext myBlogContext = new MyBlogContext();
IQueryable<Article> articles = myBlogContext.Articles.Where(a => true);
CurrentBlogContext currentBlogContext = new CurrentBlogContext();
foreach (Article item in articles)
{
CurrentArticle currentArticle = currentBlogContext.Articles.Where(a => a.ArticleTitle == item.ArticleTitle).FirstOrDefault();
if (currentArticle == null)
{
Console.WriteLine("存在错误 文章不存在");
Console.WriteLine(item.ArticleTitle);
return;
}
if (currentArticle.ArticleContent == item.ArticleContent)
{
Console.WriteLine(item.ArticleTitle + "True");
}
else
{
Console.WriteLine(item.ArticleTitle + "出错");
return;
}
}
Console.WriteLine("比对成功 全部正确");
Console.WriteLine(articles.Count());
本文投稿作者:飒飒,如若转载,请注明出处:https://iymark.com/articles/3114.html