SubmitChanges()仅更新1个字段?

时间:2009-10-25 09:07:30

标签: linq linq-to-sql submitchanges

我真的是一个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

即使我改变了几乎所有的字段,我的表已经有了主键。但还是有问题。

请帮忙!

2 个答案:

答案 0 :(得分:0)

您是否已逐步执行save方法以查看代码的作用?它是否找到了正确的主键列,是否确实检测到现有主键的存在?

您在tbl_album中有哪些字段 - 您是否确保它们未被标记为只读(不太可能,但仍然 - 请确认!)。

我现在看不到你的代码根本不对你的代码产生影响,看起来我觉得有点复杂,但我相信它应该有效。

马克

<强>更新
检查以确保您的表列不是所有只读! :)

alt text

答案 1 :(得分:0)

经过大量测试后,我发现了一件事:所有外键都没有更新,普通字段也没问题。那么告诉我有没有合理的方法导致这个废话?

我google了很多但没有发现任何事情......