1

LINQ-to-SQL および SQL Server 2008 R2 で ASP.NET MVC 4 (.NET Framework 4.5) を使用しています。

この関数は、デバッグ モードで実行すると常に true を返しますが、デバッグなしで実行すると false を返します。私はかつてこのエラーを受け取りました: http://i.imgur.com/HydhT.png

これをグーグルで調べてみましたが、同様の問題がいくつか発生しましたが、すべてチェックしました:

  • UserProfiles テーブルには主キーがあります
  • データコンテキストはデータベースと同期しています
  • SubmitChanges() の引数としてConflictMode.ContinueOnConflictを入れてみました
  • LINQ デザイナーで facebookID の上に配置しようとしました: UpdateCheck=UpdateCheck.Never

何も機能しません。私はこれまでにこのようなことを経験したことがありません。誰にもアイデアはありますか?

コード:

SQL Server の facebookID フィールドは varchar(50) NULL で、デフォルト値は NULL です

public static bool changeFacebookIDByEmail(string email, string facebookID)
{
    UserProfile profile = (from s in _dc.Users
                           join u in _dc.Memberships on s.UserId equals u.UserId
                           join i in _dc.UserProfiles on u.UserId equals i.userID
                           where u.Email == email
                           select i).SingleOrDefault();

    profile.facebookID = facebookID;

    ChangeSet cs = _dc.GetChangeSet();

    _dc.SubmitChanges();

    if (cs.Updates.Count <= 0)
        return false;
    else
        return true;
}
4

2 に答える 2

1

手動の SQL ステートメントを実行しているようです。

UPDATE UserProfiles SET facebookID = NULL WHERE userID = '85A6D951-15C8-4892-B17D-BD93F3D0ACBB'

これにより、facebookIDが null に設定されます。ただし、エンティティ フレームワークはこれを認識していません。生の SQL を解釈できません。facebookIDそのため、が何らかの値に設定されているとまだ考えています。changeFacebookIDByEmail後でEFでその値に設定すると、何も変更されていないと見なされます。

したがって、おそらく生の SQL 文字列を実行するべきではありません。EF を使用して値を null に変更します。

于 2012-09-16T11:37:16.017 に答える
0

.singleordefaultを.singleに変更します。その後すぐに問題が明らかになると思います。

基本的に、クエリで見つかったものはすべてデータコンテキストにあります。デフォルトなどの新しいものはありません。

ルーチンが見つからない場合は、新しいユーザーを挿入するようにルーチンを書き直す必要があります。

編集

これは私が取り組んできたプロジェクトのコードです。私はそれがどのように機能するかを示すためにたくさんのものを切り取りました。

// add the identity as necessary
var found = dB.Identities.SingleOrDefault(q => q.UserName == userName);

if (found == null)
{
    found = new Identity
    {
        Domain = domain,
        Password = User.Identity.AuthenticationType,
        Salt = "",
        UserName = userName,
        LastUpdatedDateTime = DateTime.Now
    };

    dB.Identities.InsertOnSubmit(found);
}



dB.SubmitChanges(null);
于 2012-09-15T22:23:14.713 に答える