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

您是否逐步通过您的save方法来查看代码在做什么?它是否找到了正确的主键列,是否确实检测到现有主键的存在?

您的哪些字段tbl_album- 您是否确保它们没有全部标记为只读(不太可能,但仍然 - 请检查以确保!)。

我现在没有看到您的代码存在根本性错误,这对我来说似乎有点复杂,但我相信它应该可以工作。

马克

更新:
检查以确保您的表列不都是只读的!:)

替代文字

于 2009-10-25T10:00:08.833 回答
0

做了很多测试,我发现一件事:所有的外键都没有更新,正常的字段是可以的。那么告诉我有什么合理的方法造成这种废话吗?

我用谷歌搜索了很多,但一无所获......

于 2009-10-26T07:35:03.890 回答