我真的是LINQ新手。我有一個未知的問題:SubmitChanges()只更新1個字段?
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
即使我改變了幾乎字段,我的表已經有主鍵了。但仍然存在問題。
請幫忙!
謝謝Marc。 我仔細檢查過該方法。我仍然不知道爲什麼會發生這種情況。一切正常,直到SubmitChanges()被執行。我所有的字段都有足夠的設置和獲取方法。 – 2009-10-25 10:17:07
因爲我的代碼太長,所以我不能把它們全部放在這裏。 無論如何,幾乎所有列都設置了以下屬性: [Column(Name =「i_artist_id」,Storage =「_ArtistID」,DbType =「Int NOT NULL DEFAULT 0」,CanBeNull = false,UpdateCheck = UpdateCheck.Never) ] 你對'只讀'屬性意味着什麼?我沒有發現這樣的事情。我的數據庫中也沒有「只讀」字段。 謝謝Marc! – 2009-10-25 10:57:04
Marc, 我檢查了,但所有隻讀都是錯誤的。有沒有合理的方法? – 2009-10-25 14:02:23