2012-02-17 29 views
5

Soy nuevo en Entity Framework, y creo que hay algo que no entiendo bien aquí. Estoy tratando de insertar una fila en una tabla, y en todas partes encontré un ejemplo de código, llaman al método InsertOnSubmit(), pero el problema es que no puedo encontrar en ninguna parte el método InsertOnSubmit, o SubmitChanges.No se puede encontrar el método InsertOnSubmit()

El error dime: System.Data.Object.ObjectSet no contienen la definición de InsertOnSubmit, ...

Lo que estoy haciendo mal ??

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 

Editar: con Visual Studio 2010 en FW 4.0

+0

Está utilizando EF, no LINQ to SQL. – SLaks

+1

Está mezclando linq-to-sql y [Entity Framework] (http://msdn.microsoft.com/en-us/library/bb738695.aspx). Usas el último –

+0

Oups Mi mal, voy a arreglar la publicación – Hugo

Respuesta

14

InsertOnSubmit es un método de LINQ a SQL y no en el marco de la entidad.

Sin embargo, dado que nuestro proyecto era una conversión de SQL LINQ-a-tenemos algunos métodos de extensión que pueden ayudar:

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); 
    } 
} 

Dónde EntityHelper is as per the MyExtensions de código abierto library.

+0

Finalmente encontré lo que estaba mal, mi base de datos Entity era un archivo dbmx y no un archivo dbml. No entiendo por qué esto ... pero siempre ha funcionado. (Necesito comprar un nuevo libro, supongo) – Hugo

+0

¿Son estos los únicos métodos que son específicos de sq-to-sql o hay otros que no funcionan al migrar a EF? – frenchie

+0

@frenchie - Esto probablemente no sea exhaustivo, pero resolvió la mayor parte de nuestros problemas. – Reddog

1

Finalmente encontré lo que estaba mal, mi base de datos Entity era un archivo dbmx y no un archivo dbml. No entiendo por qué esto ... pero siempre ha funcionado. (Necesidad de comprar un libro nuevo, supongo) - Hugo Feb 17 a las 19:40

0

yo también tengo el mismo problema .no puede insertar mediante Agregar

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

Hola esto funciona para mí

Entity db = new Entity(); 

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

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