5

我是实体框架的新手,我认为这里有一些我误解的东西。我正在尝试在表格中插入一行,并且在任何我找到代码示例的地方,他们都调用方法 InsertOnSubmit(),但问题是我在任何地方都找不到方法 InsertOnSubmit 或 SubmitChanges。

错误告诉我:System.Data.Object.ObjectSet 不包含 InsertOnSubmit 的定义,...

我做错了什么??

http://msdn.microsoft.com/en-us/library/bb763516.aspx

        GMR_DEVEntities CTX;
        CTX = new GMR_DEVEntities();
        tblConfig Config = new tblConfig { ID = Guid.NewGuid(), Code = "new config code" };
        CTX.tblConfigs.InsertOnSubmit(Config); // Error here

编辑:在 FW 4.0 上使用 Visual Studio 2010

4

4 回答 4

14

InsertOnSubmit是一种 Linq-to-SQL 方法,不在实体框架中。

然而,由于我们的项目是从 Linq 到 SQL 的转换,我们有一些扩展方法可能会有所帮助:

public static class ObjectContextExtensions
{
    public static void SubmitChanges(this ObjectContext context)
    {
        context.SaveChanges();
    }

    public static void InsertOnSubmit<T>(this ObjectQuery<T> table, T entity)
    {
        table.Context.AddObject(GetEntitySetName(table.Context, entity.GetType()), entity);
    }

    public static void InsertAllOnSubmit<T>(this ObjectQuery<T> table, IEnumerable<T> entities)
    {
        var entitySetName = GetEntitySetName(table.Context, typeof(T));
        foreach (var entity in entities)
        {
            table.Context.AddObject(entitySetName, entity);
        }
    }

    public static void DeleteAllOnSubmit<T>(this ObjectQuery<T> table, IEnumerable<T> entities) where T : EntityObject, new()
    {
        var entitiesList = entities.ToList();
        foreach (var entity in entitiesList)
        {
            if (null == entity.EntityKey)
            {
                SetEntityKey(table.Context, entity);
            }

            var toDelete = (T)table.Context.GetObjectByKey(entity.EntityKey);
            if (null != toDelete)
            {
                table.Context.DeleteObject(toDelete);
            }
        }
    }

    public static void SetEntityKey<TEntity>(this ObjectContext context, TEntity entity) where TEntity : EntityObject, new()
    {
        entity.EntityKey = context.CreateEntityKey(GetEntitySetName(context, entity.GetType()), entity);
    }

    public static string GetEntitySetName(this ObjectContext context, Type entityType)
    {
        return EntityHelper.GetEntitySetName(entityType, context);
    }
}

EntityHelper根据 MyExtensions开源在哪里。

于 2012-02-17T19:23:27.283 回答
5

你好,这对我有用

Entity db = new Entity();

TABLE_NAME table = new TABLE_NAME 
                    {
                       COLUMN1 = "TEST",
                       cOLUMN2 = "test"
                      //etc...
                    };

                    db.TABLE_NAME.Add(table);
                    db.SaveChanges();
于 2017-02-02T15:54:51.370 回答
1

终于找到问题所在了,我的Entity数据库是dbmx文件而不是dbml文件。我不明白为什么会这样..但只要它有效。(我猜需要买一本新书)——雨果 2 月 17 日 19:40

于 2012-03-16T19:48:50.240 回答
0

我也有同样的问题。我们可以使用添加插入

GMR_DEVEntities CTX;
    CTX = new GMR_DEVEntities();
    tblConfig Config = new tblConfig { ID = Guid.NewGuid(), Code = "new config code" };
    CTX.tblConfigs.Add(Config);
于 2014-04-02T07:25:02.207 回答