实体框架和DataNavigator

时间:2011-05-15 15:55:55

标签: c# winforms entity-framework datagrid

有没有人设法使用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

1 个答案:

答案 0 :(得分:2)

我认为你应该使用BindingSource控制而不是使用DataSource并处理AddingNew事件,通过调用Added手动将状态设置为AddObject

DataGrid对数据源一无所知,因此无法与实体框架上下文/集合和添加对象进行通信。您必须手动执行此操作,因此在添加新记录时需要处理一些事件。我相信AddingNewBindingSource是可行的。