首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >entity framework数据库映射(ORM)

entity framework数据库映射(ORM)

作者头像
sofu456
发布2022-05-06 15:26:35
发布2022-05-06 15:26:35
1.4K0
举报
文章被收录于专栏:sofu456sofu456

三种开发模式

ORM框架的对象关系映射

  • DataBase First (数据库优先,还没写代码)
  • Model First (模型优先edmx文件,数据库表未创建)
  • Code First (代码优先)

Sql Server安装:EntityFramework Mysql安装:MySql.Data.Entity

数据库优先

选择ADO.NET实体对象,

  • 来自数据库的EF设计器 导入数据库结构

模型优先

选择ADO.NET实体对象,创建edmx文件,需要安装vs数据库连接插件或者odbc驱动 mysql使用数据库连接字符串

代码语言:javascript
复制
<connectionStrings>
    <add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;initial catalog=DatabaseFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
  • 空EF设计器

右键菜单中,验证有无错误,连接数据库生成表数据

确保表包含主键,否则edmx生成错误,不会自动生成表

添加代码生成项,创建模型DBContext代码

代码语言:javascript
复制
using (Model1Container mc = new Model1Container())
{
     mc.BlogsSet.Add(new Blogs()
     {
         Id = 1,
         Name = "hello",
         Title = "world"
     });
     mc.SaveChanges();
 }    

代码优先

选择ADO.NET实体对象,

  • 空的Code first设计器 或者自己添加cs代码
代码语言:javascript
复制
	[Table("Blog")]
	public class Blog
    {
        [Key]
        public int BlogId { get; set; }    //字段在数据库中不显示
        [Required]   //不为空
        [[StringLength(128)]]
        public string Title { get; set; }
        public DateTime CreateDate { get; set; }
    }
    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class BlogEntities : DbContext
    {
    	public BlogEntities():base("name=mysqltest") { }     //mysqltest是app.config中的key name
        public DbSet<Blog> Blogs { get; set; }
    }

创建数据库

代码语言:javascript
复制
	using(BlogEntities blog = new BlogEntities())
    {
        blog.Blogs.Add(new Blog() {
            BlogId = 1,
            Title = "test",
            CreateDate = DateTime.Now
        });
        blog.SaveChanges();
    }

nuget添加EntityFramework后,配置文件App.config文件中配置数据库连接 不同的数据库,需要在nuget中搜索不同的ef,mysql和sqlserver的ef不同

代码语言:javascript
复制
    <entityFramework>
        <providers>
            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
        </providers>
    </entityFramework>

添加连接字符串,数据库名mysql,codefirst数据库重复不创建

代码语言:javascript
复制
<connectionStrings>
    <add name="mysqltest" connectionString="Data Source=localhost;port=3306;Initial Catalog=mysql;user id=root;password=root;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

ef自动创建数据库和表,在已有数据库中需要创建结构一致的表(这个操作和code first违背)

找不到provider

注意version版本号

代码语言:javascript
复制
<system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

找不到加载的文件

可能原因,nutget导致csproj文件依赖丢失,添加上就可以了。

orm访问access

  • nuget安装EF框架:entityframeworkcore.jet
  • nuget安装provider驱动:JetEntityFrameworkProvider

添加引用

using System.ComponentModel.DataAnnotations;//为了后续说明主键[Key] using EntityFrameworkCore.Jet; using Microsoft.EntityFrameworkCore;

代码语言:javascript
复制
//重写DbContext的配置函数
public MyDbContext(): base()	{}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
	//Microsoft.ACE.OLEDB.12.0或者Microsoft.Jet.OLEDB.4.0
	optionsBuilder.UseJet(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\xxx\ConsoleApp1\data\d1.accdb;");
}

参考:https://blog.csdn.net/diaocang3578/article/details/101230788

sqlite

安装Microsoft.EntityFramework.Sqlite

代码语言:javascript
复制
private DataBaseSystem() : base()
{
    Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlite("Data Source=.\\DBFile\\" + DateTime.Now.ToString("yyyyMMdd") + ".db");
}

三种事务模式

  • SaveChanges,EF事务模式
  • DbContextTransaction,手动操作事务
  • TransactionScope,多数据库操作

安装ef插件,使用BulkSaveChanges提高效率

https://www.cnblogs.com/yaopengfei/p/7748221.html https://www.cnblogs.com/shiyh/p/8979508.html

entity

  • ms sql server:Microsoft.EntityFrameworkCore.SqlServer
  • sqlite:Microsoft.EntityFrameworkCore.Sqlite
  • mysql:MySql.Data.EntityFrameworkCore
  • access:EntityFrameworkCore.Jet
  • postgresql:Npgsql.EntityFrameworkCore.PostgreSQL

参考

https://www.cnblogs.com/1312mn/p/9239419.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三种开发模式
  • 数据库优先
  • 模型优先
  • 代码优先
  • 找不到provider
  • 找不到加载的文件
  • orm访问access
  • sqlite
  • 三种事务模式
  • entity
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档