Entity framework 4 实体框架ObjectContext共享-优缺点
在我的项目中,我使用EntityFramework4.0作为ORM在SQLServer中持久化数据 我的项目是应用程序中的一个功能区,主窗体中有一个网格视图和导航树,顶部有功能区面板。我的应用程序基本上是一个CRUD用户界面,几乎没有业务逻辑 作为第一次使用EF,我通过在编排表单(主表单或显示为用户应用程序的表单)中创建并保存objectContext实例作为成员变量来开发此项目,并将查询绑定到网格视图 对于功能区面板按钮单击、网格视图行单击等各种事件,我打开另一个windows窗体。在该窗口窗体中,我创建了另一个对象上下文并存储在该窗体类的成员变量中 我读过一些博客和问题,比如:Entity framework 4 实体框架ObjectContext共享-优缺点,entity-framework-4,objectcontext,Entity Framework 4,Objectcontext,在我的项目中,我使用EntityFramework4.0作为ORM在SQLServer中持久化数据 我的项目是应用程序中的一个功能区,主窗体中有一个网格视图和导航树,顶部有功能区面板。我的应用程序基本上是一个CRUD用户界面,几乎没有业务逻辑 作为第一次使用EF,我通过在编排表单(主表单或显示为用户应用程序的表单)中创建并保存objectContext实例作为成员变量来开发此项目,并将查询绑定到网格视图 对于功能区面板按钮单击、网格视图行单击等各种事件,我打开另一个windows窗体。在该窗口窗
- Winforms
- C#
- VS 2012
- EF 4.0,采用数据优先方法创建的模型
HttpWebRequest
,也可能是根据逻辑数据操作(针对每个实现的“业务逻辑”)执行的
例如:
将创建一个上下文,加载数据列表以及所需的任何相关数据,然后处理上下文LoadBusinssObjects()
将创建一个上下文,创建某个实体的实例,用数据填充它,将其附加到上下文中的集合,保存更改,然后处理上下文CreateBusinessObject()
将从上下文中读取一些对象,对其进行更新,保存更改,并处理上下文UpdateBusinessObject()
将在上下文中找到一个业务对象,将其从上下文中的集合中删除,保存更改并处置上下文DeleteBusinessObject()
public class MyCodeFirstEntityChangedArgs : EventArgs
{
/// <summary>
/// The primary key of the entity being changed.
/// </summary>
public int Id {get;set;}
/// <summary>
/// You probably want to make this an ENUM for Added/Modified/Removed
/// </summary>
public string ChangeReason {get;set;}
}
public class MyCodeFirstEntity
{
public int Id {get;set;}
public string SomeProperty {get;set;}
/// <summary>
/// Occurs when an instance of this entity model has been changed.
/// </summary>
public static event EventHandler<MyCodeFirstEntityChangedArgs> EntityChanged;
}
public class MyBusinessLogic
{
public static void UpdateMyCodeFirstEntity(int entityId, MyCodeFirstEntity newEntityData)
{
using(var context = new MyEFContext())
{
// Find the existing record in the database
var existingRecord = context.MyCodeFirstEntityDbSet.Find(entityId);
// Copy over some changes (in real life we have a
// generic reflection based object copying method)
existingRecord.Name = newEntityData.Name;
// Save our changes via EF
context.SaveChanges();
// Fire our event handler so that other UI components
// subscribed to this event know to refresh/update their views.
// ----
// NOTE: If SaveChanges() threw an exception, you won't get here.
MyCodeFirstEntity.EntityChanged(null, new MyCodeFirstEntityChangedArgs()
{
Id = existingRecord.Id,
ChangeReason = "Updated"
});
}
}
}
现在,您拥有的每个UI组件都可以订阅对其重要的事件。如果您有一个树列表和一些编辑器表单,那么树列表将订阅任何更改以添加/更新/删除节点(或者简单的方法-只需刷新整个树列表)
应用程序之间的更新
如果您想更进一步,甚至在连接的环境中链接应用程序的单独实例,您可以通过网络使用类似的方式实现发布/订阅事件系统。WebSync内置了所有功能,可以将您要订阅或发布到的每个实体/事件的事件分隔成逻辑“通道”。是的,我在一家制作WebSync的软件公司工作,他们为我付费
static void MyCodeFirstEntity_LocalEventHandler(object sender, MyCodeFirstEntityChangedArgs e)
{
// Something somewhere changed a record! I better refresh some local UI view.
}