LINQ To SQL在观察数据库默认值方面存在问题,无法随后更新该值。为了允许这样做,您需要在代码中设置默认值。
当创建新的对象时,如果该对象是NOT NULL
且具有数据库默认值,则C#将使用默认值,例如数字和日期的MinValue
,空GUID(零),等等。您可以查找这些条件并替换为自己的默认值。
这是LINQ To SQL已知的设计问题。有关详细讨论,请参见此链接:
http://www.codeproject.com/KB/linq/SettingDefaultValues.aspx
以下是一些在应用程序中设置默认值的示例代码:
private void SetDefaults(object LinqObj)
{
PropertyInfo[] props = LinqObj.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
try
{
object[] customAttributes = prop.GetCustomAttributes
(typeof(System.Data.Linq.Mapping.ColumnAttribute), false);
if (((System.Data.Linq.Mapping.ColumnAttribute)
(customAttributes[0])).DbType.ToLower().IndexOf("not null") != -1)
{
if (prop.GetValue(LinqObj, null) == null || prop.GetValue(LinqObj,
null).ToString() == (new DateTime(1, 1, 1, 0, 0, 0)).ToString())
{
switch (prop.PropertyType.ToString())
{
case "System.String":
prop.SetValue(LinqObj, String.Empty, null);
break;
case "System.Int32":
case "System.Int64":
case "System.Int16":
prop.SetValue(LinqObj, 0, null);
break;
case "System.DateTime":
prop.SetValue(LinqObj, DateTime.Now, null);
break;
}
}
}
}
catch
{
}
}