5

私はEntityFrameworkを初めて使用しますが、ここで誤解していることがあると思います。テーブルに行を挿入しようとしています。コード例を見つけたところはどこでも、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

編集:FW4.0でのVisualStudio2010の使用

4

4 に答える 4

14

InsertOnSubmitEntity Framework ではなく、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);
    }
}

MyExtensionsオープン ソースライブラリによる場所EntityHelperです

于 2012-02-17T19:23:27.283 に答える
1

最終的に何が問題なのかがわかりました。私のエンティティ データベースは dbmx ファイルであり、dbml ファイルではありませんでした。なぜこれが..かわかりませんが、長く機能しています。(私が推測する新しい本を購入する必要があります) – Hugo 2月17日19:40

于 2012-03-16T19:48:50.240 に答える
0

私も同じ問題を抱えています.Addを使用して挿入できます

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 に答える