12

デバッグを試みている間、コードを少し簡略化しました。

[HttpPost]
    public ActionResult Register(User model)
    {
        DateTime bla = new DateTime(2012, 12, 12);
        try
        {
            User user = new User
            {
                gid = 1,
                cid = 1,
                firstName = model.firstName,
                lastName = model.lastName,
                email = model.email,
                username = model.username,
                password = model.password,
                creationDate = bla,
                active = 1
            };
            myContext.Users.AddObject(user);
            myContext.SaveChanges();

        }
        catch (Exception ex)
        {
            throw ex;
        }

        return View();               
    }

値はそれに応じて送信されます。ユーザーテーブル:

[id] [int] IDENTITY(1,1) NOT NULL,
[cid] [int] NULL,
[gid] [int] NULL,
[firstName] [nvarchar](100) NOT NULL,
[lastName] [nvarchar](100) NOT NULL,
[email] [nvarchar](max) NOT NULL,
[username] [nvarchar](100) NOT NULL,
[password] [nvarchar](100) NOT NULL,
[creationDate] [datetime] NOT NULL,
[active] [int] NOT NULL,

CONSTRAINT [PK_Users_3213E83F0AD2A005 ]主キーがクラスター化されました

何も影響がないことを確認するために、すべての外部キーを削除しました。以前は機能していたと確信していますが、今はどこに問題があるのか​​わかりません。savechangesの実行中にクラッシュします。

{"An error occurred while updating the entries. See the inner exception for details."}
{"The member with identity '' does not exist in the metadata collection.\r\nParameter name: identity"}
4

10 に答える 10

11

EFを使用して挿入しようとすると、同じエラーがスローされました。エラーは

The member with identity 'Id' does not exist in the metadata collection.\r\nParameter name: identity

最初は明らかではありませんでしたが、データベースは列を認識しているため、例外メッセージは非常に簡潔でしたId intが、コード上のオブジェクト用に作成されたプロパティがint ID名前付きマッピングに戻ったため、ID は ID にマップされませんでした。

したがって、プロパティを持つオブジェクトがIDデータベースに送信されるIdと、上記のエラーが発生します。

これが役立つことを願っています、ありがとう

于 2014-02-15T23:34:49.617 に答える
10

ユーザーテーブルにトリガーがあったため、問題が再現されていました。それを削除し、問題はもう再現されていません。

于 2012-05-31T08:49:01.017 に答える
4

最善の解決策はこの投稿にあると思います。私は3番目のオプションを使用し、動作します。ここで、リンクで返信を報告します。

この問題は、テーブルの 1 つでの「挿入の代わりに」トリガーに関連している可能性があります。

EF フレームワークは、scope_identity() を呼び出して、挿入されたデータ行の検証を実行しています。ただし、「挿入の代わりに」トリガーは、EF システムの scope_identity への呼び出しが null を返すように、挿入のコンテキストを変更します。

これを回避するいくつかの方法:

  1. ストアド プロシージャを使用してデータを挿入します (未テスト)。
  2. トリガーを挿入する代わりに削除します(トリガーは他の問題を引き起こす可能性があるため、トリガーを使用しないと主張する人もいます)(テスト済み、動作します!)
  3. EF フレームワークで検証をオフにします。context.Configuration.ValidateOnSaveEnabled = false (テスト済み、動作します!)
于 2014-07-28T09:27:22.433 に答える
0

これを試して

[HttpPost]
public ActionResult Register(User model)
{
    DateTime bla = new DateTime(2012, 12, 12);
    try
    {
        model.gid = 1;
        model.cid = 1;
        model.creationDate = bla;
        model.active = 1;

        myContext.Users.AddObject(model);
        myContext.SaveChanges();

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
        throw;
    }

    return View();               
}
于 2012-05-30T15:46:47.690 に答える
-1

これは、このエラー メッセージを生成する問題の私のバージョンの説明を検索したときに Google が返した最初のページです。そのため、解決策とともにここで説明します。

問題の私のバージョンでは、問題のあるコードは次のようになりました。

    foreach (var comp in colorstyle.Companions)
        comp.LinkCS = db.ColorStyles.Find(comp.LinkColorStyleId);

私は、このコードを含むアプリケーションの保守とサポートの仕事を引き継ぎました。このコードは、同じオブジェクトの関連付けられた外部キー プロパティをルックアップとして使用して、ナビゲーション プロパティを既に関連付けられているエンティティに設定しています。それは完全に不必要であり、時々..常にではありません..このエラーが発生するようです:

「ID 'Customization_ColorStyleCustomizations_Source' を持つメンバーは、メタデータ コレクションに存在しません。パラメーター名: ID」

かなりのエラー メッセージですね。

2 年間、このコードはエラーをスローすることなくそのままでしたが、ある日突然、特定のカラー スタイルでこのエラーが発生し始めました。/振る。わかりません。しかし、それは必要ではなく、それを取り除くことで問題が解決するので. 同じ一般的な問題を抱えている他の誰かがこれに遭遇した場合に備えて、ここにあります.

(明確でない場合 - この場合、解決策は単純にコードを削除することでした。)

于 2015-11-24T19:08:52.490 に答える