0

私は本当にLINQの初心者です。不明な問題が発生しました:

public static int save(TEntity obj)
    {
        var table = dbo.GetTable<TEntity>();
        var mapping = dbo.Mapping.GetTable(typeof(TEntity));
        var pkfield = mapping.RowType.DataMembers.Where(d => d.IsPrimaryKey).Take(1).SingleOrDefault();
        if (Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)) == 0)
            table.InsertOnSubmit(obj);
        try
        {
            dbo.SubmitChanges();
        }
        catch (ChangeConflictException e)
        {
            dbo.SubmitChanges();
        }
        if (dbo.ChangeConflicts.Count == 0)
        {
            ClearCache(dbo);
            return Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null));
        }
        else
        {
            dbo.ChangeConflicts.ResolveAll(System.Data.Linq.RefreshMode.KeepCurrentValues);
            return 0;
        }
    }

このメソッドを使用すると、更新されたフィールドは 1 つだけです!! これが私のログです:

UPDATE [dbo].[tbl_album]
SET [dt_m_date] = @p1
WHERE [i_album_id] = @p0
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1256485605]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918

ほとんどのフィールドを変更しても、テーブルにはすでに主キーがあります。しかし、まだ問題があります。

助けてください!

4

2 に答える 2

0

多くのテストを行った後、1 つのことがわかりました。すべての外部キーが更新されておらず、通常のフィールドは問題ありません。それで、このがらくたを引き起こした合理的な方法はありますか?

私はたくさんグーグルで検索しましたが、何も見つかりませんでした...

于 2009-10-26T07:35:03.890 に答える
0

メソッドをステップ実行してsave、コードが何を行っているかを確認しましたか? 正しい主キー列が見つかりましたか? また、既存の主キーの存在を実際に検出しましたか?

あなたの中にどのようなフィールドがありますtbl_albumか - それらがすべて読み取り専用としてマークされていないことを確認しましたか (可能性は低いですが、それでも - 確認してください!)。

現在、あなたのコードでアンチシングが根本的に間違っているとは思いません。私の好みでは少し複雑に思えますが、うまくいくはずです。

マルク

更新:
テーブルの列がすべて読み取り専用でないことを確認してください! :)

代替テキスト

于 2009-10-25T10:00:08.833 に答える