有没有人设法使用DataSource属性和ADO.NET实体框架绑定DataNavigator和DataGrid,以便添加和删除(数据导航器中的+和 - 按钮)。工作?我有问题,每次我点击DataNavigator的添加按钮时,EntityState总是设置为分离。我无法弄清楚,如何将这个分离的实体添加到DataContext。
我的代码很简单(使用静态会话类和部分类):
internal class Session
{
private static Entities _entities;
public static Entities Entities
{
get { return _entities ?? (_entities = new Entities()); }
set { _entities = value; }
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitData();
}
private void InitData()
{
gridControl1.DataSource = Session.Entities.SomeObjects;
dataNavigator1.DataSource = Session.Entities.SomeObjects;
}
}
public partial class SomeObjects
{
public SomeObjects()
{
PropertyChanged += SomeObject_PropertyChanged;
ObjectId = Guid.NewGuid();
}
private void SomeObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Debug.WriteLine(EntityState); // when i change a existing record in the grid, EntityState is set to modified and can be saved easily using SaveChanges. But when i add a new entity, EntityState is always set to detached.
}
}
帮助表示赞赏!
-Christian
答案 0 :(得分:2)
我认为你应该使用BindingSource
控制而不是使用DataSource
并处理AddingNew
事件,通过调用Added
手动将状态设置为AddObject
。
DataGrid对数据源一无所知,因此无法与实体框架上下文/集合和添加对象进行通信。您必须手动执行此操作,因此在添加新记录时需要处理一些事件。我相信AddingNew
和BindingSource
是可行的。