Не удается найти метод InsertOnSubmit () - PullRequest
5 голосов
/ 17 февраля 2012

Я новичок в Entity Framework, и я думаю, что здесь есть кое-что, что я неправильно понял. Я пытаюсь вставить строку в таблицу, и везде, где я нашел пример кода, они вызывают метод 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

Edit: Использование Visual Studio 2010 на FW 4.0

Ответы [ 4 ]

14 голосов
/ 17 февраля 2012

InsertOnSubmit - это метод Linq-to-SQL, а не в Entity Framework.

Однако, поскольку наш проект был преобразованием из 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 с открытым исходным кодом библиотека .

2 голосов
/ 02 февраля 2017

Здравствуйте, это работает для меня

Entity db = new Entity();

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

                    db.TABLE_NAME.Add(table);
                    db.SaveChanges();
1 голос
/ 16 марта 2012

Наконец-то нашел, что не так, моя база данных Entity была файлом dbmx, а не файлом dbml. Я не понимаю, почему это .. но уже давно это работает. (Мне нужно купить новую книгу, я думаю) - Хьюго 17 февраля в 19:40

0 голосов
/ 02 апреля 2014

У меня тоже такая же проблема. Мы можем вставить, используя Добавить

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