ORM框架的对象关系映射
Sql Server安装:EntityFramework Mysql安装:MySql.Data.Entity
选择ADO.NET实体对象,
选择ADO.NET实体对象,创建edmx文件,需要安装vs数据库连接插件或者odbc驱动 mysql使用数据库连接字符串
<connectionStrings>
<add name="BloggingContext" connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(localdb)\v11.0;initial catalog=DatabaseFirst.Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
右键菜单中,验证有无错误,连接数据库生成表数据

确保表包含主键,否则edmx生成错误,不会自动生成表
添加代码生成项,创建模型DBContext代码
using (Model1Container mc = new Model1Container())
{
mc.BlogsSet.Add(new Blogs()
{
Id = 1,
Name = "hello",
Title = "world"
});
mc.SaveChanges();
} 选择ADO.NET实体对象,
[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; }
}创建数据库
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不同
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>添加连接字符串,数据库名mysql,codefirst数据库重复不创建
<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违背)
注意version版本号
<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文件依赖丢失,添加上就可以了。
添加引用
using System.ComponentModel.DataAnnotations;//为了后续说明主键[Key] using EntityFrameworkCore.Jet; using Microsoft.EntityFrameworkCore;
//重写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
安装Microsoft.EntityFramework.Sqlite
private DataBaseSystem() : base()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=.\\DBFile\\" + DateTime.Now.ToString("yyyyMMdd") + ".db");
}安装ef插件,使用BulkSaveChanges提高效率


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