.net Entity Framework + mysql 使用中常见问题
2014-02-26 10:55
483 查看
1. 对于Mysql 表记录进行更新时,如果更新内容没变化,则entities.SaveChanges() 会引起错误信息。
此原因为mysql返回为0,而此框架则认识没作任何更新会是错误。
解决方法是:在框架中修改框架构造添加事件,以下是代码
2. 使用查询语句时,如
var family = (from fl in entities.Tbl_Info_Family
where fl.Family_ID == _familyID
select fl);
是在下面使用到family 时,才去执行到SQL进行数据库查询。
因此在用到family时,foreach里面不能再套一层foreach的数据库查询,会导致错误。如果要这使用时,可以直接先使用.ToArray() 查询出来直接foreach遍历结果
3. 关于SQL查询语句中的in 对应到Linq中使用
var query = from mb in entities.Tbl_Info_Family_Member
where (from fm in entities.Tbl_Info_Family
where fm.Family_ID >= 1 && fm.Family_ID <= 2
select fm.Family_ID).Contains(mb.Family_ID)
select mb;
或者是 List<long> lst = new List<long>();
var query = from mb in entities.Tbl_Info_Family_Member
where lst.Contains(mb.Family_ID)
select mb;
4. 事务操作,对于Mysql表引擎默认使用MyISam是不支持事务的,因此需要修改成InnoDB
事务用法是:
using (TransactionScope scope = new TransactionScope())
{
HomeEntities entities = new HomeEntities();
//增加表记录
Home hm = new Home();
entities.AddToHome(hm);
entities.SaveChanges();
//增加另外一条记录,有ID关联
Student sd = new Student();
sd.HomeID = hm.HomeID;
entities.AddToStudent(sd);
entities.SaveChanges();
scope.Complete();
}
此原因为mysql返回为0,而此框架则认识没作任何更新会是错误。
解决方法是:在框架中修改框架构造添加事件,以下是代码
#region 构造函数 /// <summary> /// 请使用应用程序配置文件的“Healthy2013Entities”部分中的连接字符串初始化新 Healthy2013Entities 对象。 /// </summary> public Healthy2013Entities() : base("name=Healthy2013Entities", "Healthy2013Entities") { this.ContextOptions.LazyLoadingEnabled = true; OnContextCreated(); this.SavingChanges += new EventHandler(Healthy2013Entities_SavingChanges); } void Healthy2013Entities_SavingChanges(object sender, EventArgs e) { var context = sender as ObjectContext; if (context == null) return; var updatedEntites = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified); foreach (var ose in updatedEntites) { var props = ose.GetModifiedProperties(); int modifyCount = 0; int propCount = 0; foreach (var item in props) { var index = ose.OriginalValues.GetOrdinal(item); if (ose.OriginalValues.GetValue(index).Equals(ose.CurrentValues.GetValue(index))) { modifyCount++; } propCount++; } if (modifyCount == propCount) { context.Refresh(RefreshMode.StoreWins, ose.Entity); } } } /// <summary> /// 初始化新的 Healthy2013Entities 对象。 /// </summary> public Healthy2013Entities(string connectionString) : base(connectionString, "Healthy2013Entities") { this.ContextOptions.LazyLoadingEnabled = true; OnContextCreated(); this.SavingChanges += new EventHandler(Healthy2013Entities_SavingChanges); } /// <summary> /// 初始化新的 Healthy2013Entities 对象。 /// </summary> public Healthy2013Entities(EntityConnection connection) : base(connection, "Healthy2013Entities") { this.ContextOptions.LazyLoadingEnabled = true; OnContextCreated(); this.SavingChanges += new EventHandler(Healthy2013Entities_SavingChanges); } #endregion
2. 使用查询语句时,如
var family = (from fl in entities.Tbl_Info_Family
where fl.Family_ID == _familyID
select fl);
是在下面使用到family 时,才去执行到SQL进行数据库查询。
因此在用到family时,foreach里面不能再套一层foreach的数据库查询,会导致错误。如果要这使用时,可以直接先使用.ToArray() 查询出来直接foreach遍历结果
3. 关于SQL查询语句中的in 对应到Linq中使用
var query = from mb in entities.Tbl_Info_Family_Member
where (from fm in entities.Tbl_Info_Family
where fm.Family_ID >= 1 && fm.Family_ID <= 2
select fm.Family_ID).Contains(mb.Family_ID)
select mb;
或者是 List<long> lst = new List<long>();
var query = from mb in entities.Tbl_Info_Family_Member
where lst.Contains(mb.Family_ID)
select mb;
4. 事务操作,对于Mysql表引擎默认使用MyISam是不支持事务的,因此需要修改成InnoDB
事务用法是:
using (TransactionScope scope = new TransactionScope())
{
HomeEntities entities = new HomeEntities();
//增加表记录
Home hm = new Home();
entities.AddToHome(hm);
entities.SaveChanges();
//增加另外一条记录,有ID关联
Student sd = new Student();
sd.HomeID = hm.HomeID;
entities.AddToStudent(sd);
entities.SaveChanges();
scope.Complete();
}
相关文章推荐
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- 在 ADO.NET Entity Framework 中使用存储过程
- 在ASP.NET中使用Session常见问题集锦
- CKEditor和CKFind 使用配置 常见配置问题的解决办法 CKEditor Demo(Asp.net)
- C#.NET常见问题(FAQ)-如何使用变量动态添加控件
- .NET Entity Framework(EF)使用SqlQuery直接操作SQL查询语句或者执行过程
- asp.net DotNetTextBox编辑器使用中的常见问题FAQ
- 在ASP.NET中使用Session常见问题集锦
- .NET Micro Framework常见问题问答 推荐
- 在使用 ADO.NET Entity Framework 时生成的实体类个数少于数据表个数的几种情况及原因分析
- EntityFrameworkCode 操作MySql 相关问题
- linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】
- ADO.NET Entity Framework使用实体数据
- 使用ADO.NET Entity Framework的实体作为数据源Data Source(附Demo程序下载)- 系列3
- ADO.NET Entity Framework 如何:使用 EdmGen.exe 生成模型和映射文件
- ADO.NET Entity Framework 使用数据定义语言(实体框架)
- 使用 Visual Studio 的 ASP.NET Core MVC 和 Entity Framework Core 入门 (1 of 10)