2012-02-17 2 views
5

Я новичок в платформе Entity Framework, и я думаю, что я не понимаю здесь. Я пытаюсь вставить строку в таблицу, и везде я нашел пример кода, они вызывают метод InsertOnSubmit(), но проблема в том, что я не могу найти нигде метод InsertOnSubmit или SubmitChanges.Не удается найти метод InsertOnSubmit()

Ошибка скажите мне: 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

+0

Вы используете EF, а не LINQ to SQL. – SLaks

+1

Вы смешиваете linq-to-sql и [Entity Framework] (http://msdn.microsoft.com/en-us/library/bb738695.aspx). Вы используете последний. –

+0

Oups My bad, я исправлю сообщение – Hugo

ответ

14

InsertOnSubmit является метод Linq к 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 is as per the MyExtensions Где с открытым исходным кодом library.

+0

Наконец-то выяснилось, что случилось, моя база данных Entity была файлом dbmx, а не файлом dbml. Я не понимаю, почему это ... но долго работает. (Нужно ли покупать новую книгу, я думаю) – Hugo

+0

Являются ли они единственными методами, специфичными для linq-to-sql, или есть другие, которые не работают при переходе на EF? – frenchie

+0

@frenchie - Это, вероятно, не является исчерпывающим, но он разрешил большую часть наших проблем. – Reddog

1

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

0

я также та же проблема .Мы можно вставить с помощью Добавить

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

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

Entity db = new Entity(); 

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

        db.TABLE_NAME.Add(table); 
        db.SaveChanges();