EF
- 搭建
新搭建好的EF,当你运行程序时报:
The model backing the 'SqlServerDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database
这个时候如果你用 add-migration xxx 报如下错:
No migrations configuration type was found in the assembly 'webTest'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
解决办法:去掉上下文 对象中的 : base("name=TestDb") 。执行成功后,再将代码还原。
/// <summary> /// 利用App.config中配置的字符串连接数据库 /// </summary> public SqlServerDbContext() : base("name=TestDb") { }
- 插入报错:An error occurred while updating the entries. See the inner exception for de
基本是实体问题,要么主键问题,要么字段多了少了,类型不对。
2. 报错:Object must implement IConvertible.
检查实体类型和字段是否一致
二、搭建
1、安装EntityFrameWork(通过工具-NeGet程序包管理-管理NeGet程序包来安装或者添加引用
如果是mysql。引用EntityFrameWork、MySql.Data.EntityFramework
2、增加app.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <!--选择生成带密码时的连接字符串--> <add name="ConDb" connectionString="Server=test.xhs-sz.com,4433;Database=RealNameSysDB;User Id=realnamer;Password=#EDCvfr4;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
<add name="mysqlDataConn" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;database=yht;uid=root;password=123;;charset=utf8mb4;" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <entityFramework> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers> </entityFramework> </configuration>
3、增加对应数据库上下文(这里为sqlserver)
public partial class SqlServerDbContext : DbContext { /// <summary> /// 利用连接字符串连接数据库 /// </summary> public SqlServerDbContext(string connStr) : base(connStr) { } /// <summary> /// 利用App.config中配置的字符串连接数据库 /// </summary> public SqlServerDbContext() : base("name=ConDb") { } //public virtual DbSet<EmployeeeSafetyStateTmpNew> employeeeSafetyStateTmpNewS { get; set; } //public virtual DbSet<TestTable> testTables { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //从某个程序集中加载所有继承自EntityTypeConfiguration类到配置中 modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly()); } } }
4.增加数据库操作方法
5.注入,调用
IList<OrderStateRecordEntity> arrOrder = new List<OrderStateRecordEntity>() { new OrderStateRecordEntity() { EmsListNO = "Test001", Note = "Note", StatusDate = DateTime.Now, Channel = "999", EntryNo = "test1", EportNo = "testEp", StatusType = 1, InsertTime = DateTime.Now, UploadState = 0, UploadTime = DateTime.Now, }, new OrderStateRecordEntity() { EmsListNO = "Test002", Note = "Note", StatusDate = DateTime.Now, Channel = "999", EntryNo = "test2", EportNo = "testEp2", StatusType = 1, InsertTime = DateTime.Now, UploadState = 0, UploadTime = DateTime.Now, } }; using (var contextDB = new MySqlDbContext()) { //1.查询 var list = contextDB.OrderStateRecord.ToList(); foreach (var item in list) { Console.WriteLine(item.StatusDate); } //2.添加 //批量添加 contextDB.OrderStateRecord.AddRange(arrOrder); contextDB.SaveChanges(); //单个添加 //contextDB.OrderStateRecord.Add(new OrderStateRecordEntity() // { // EmsListNO = "Test", // Note = "Note", // StatusDate = DateTime.Now, // Channel = "999", // EntryNo = "test1", // EportNo = "testEp", // StatusType = 1, // InsertTime = DateTime.Now, // UploadState = 0, // UploadTime = DateTime.Now, // }); //var result = contextDB.SaveChanges(); //string query = "SELECT * FROM order_state_record WHERE EmsListNO=" + project_id + " And Channel=" + sync_version_number; //var all = contextDB.Database.SqlQuery<OrderStateRecordEntity>(query); ////3.修改 //var dbOrderStateRecord = contextDB.OrderStateRecord.FirstOrDefault(m => m.Id == 1); //dbOrderStateRecord.Note = "test"; //dbOrderStateRecord.UpdateTime = DateTime.Now; ////contextDB.Set<OrderStateRecordEntity>().Attach(dbOrderStateRecord); //contextDB.Entry(dbOrderStateRecord).State = System.Data.Entity.EntityState.Modified; //result = contextDB.SaveChanges(); ////4.删除 //dbOrderStateRecord = contextDB.OrderStateRecord.FirstOrDefault(m => m.Name == "中铁一局集团有限公司"); //contextDB.OrderStateRecord.Remove(dbOrderStateRecord); //result = contextDB.SaveChanges(); }
全代码下载:https://download.csdn.net/download/xbding/74430533
搭建可参照:https://www.cnblogs.com/zpyplan/p/9565863.html
语句使用参照:https://www.cnblogs.com/zhaoshujie/p/10694188.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构