2012-02-17 24 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 

編集: FW 4.0

+0

LINQ to SQLではなくEFを使用しています。 – SLaks

+1

linq-to-sqlと[Entity Framework](http://msdn.microsoft.com/en-us/library/bb738695.aspx)が混在しています。あなたは後者を使います。 –

+0

Oups私の悪い、私は投稿を修正します – Hugo

答えて

14

InsertOnSubmitにVisual Studio 2010を使用するには、Entity Frameworkの中LINQのツーSQL方式とではありません。 EntityHelper is as per the MyExtensionsオープンソースlibrary

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

:私たちのプロジェクトはからの変換LINQのツーSQLだったので

はしかし、我々は助けるかもしれないいくつかの拡張メソッドを持っています。

+0

最後に何が間違っていたのか、Entityデータベースはdbmxファイルであり、dbmlファイルではありませんでした。私はなぜこれが..理解できませんが、それが動作するように長いです。 (私が推測する新しい本を購入する必要があります) – Hugo

+0

これらはlinq-to-SQLに固有の唯一の方法ですか、それともEFに移行するときに機能しない他の方法ですか? – frenchie

+0

@frenchie - これは完全なものではないかもしれませんが、私たちの問題の大部分を解決しました。 – Reddog

1

最後に、私のEntityデータベースはdbmxファイルであり、dbmlファイルではありませんでした。私はなぜこれが..理解できませんが、それが動作するように長いです。 (私は推測新しい本を購入する必要があります) - ヒューゴ2月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(); 
関連する問題