Linq SubmitChanges()是否仅更新1个字段?

Linq SubmitChanges()是否仅更新1个字段?,linq,linq-to-sql,submitchanges,Linq,Linq To Sql,Submitchanges,我真的是个新手。我遇到了一个未知的问题: 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.IsPrimary

我真的是个新手。我遇到了一个未知的问题:

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;
        }
    }
即使我几乎改变了字段,我的表已经有主键了。但问题依然存在


请帮忙

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

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

我不认为你的代码现在有什么根本性的错误,这对我来说似乎有点复杂,但我相信它应该能工作

马克

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


在做了很多测试之后,我发现一件事:所有外键都没有更新,普通字段都可以。告诉我有没有什么合理的方法导致这一切


我在谷歌上搜索了很多,但什么也没找到……

谢谢你,马克。我仔细检查了那个方法。我还是不知道为什么会发生这种事。在执行SubmitChanges()之前,一切正常。我所有的字段都有足够的set&get方法。因为我的代码太长,所以我无法将它们全部带到这里。无论如何,几乎所有的列都设置了以下属性:[Column(Name=“i_artist\u id”,Storage=“\u ArtistID”,DbType=“Int NOT NULL DEFAULT 0”,CanBeNull=false,UpdateCheck=UpdateCheck.Never)]关于“readonly”属性的含义是什么?我没有发现这样的东西。我的数据库中也没有“只读”字段。谢谢你,马克!马克,我查过了,但所有只读的都是假的。有什么合理的方法吗?
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