我有一些使用LINQ-to-SQL类的简单(C#,。Net 4.0)代码,我正在尝试“扩展”该对象以添加我自己的字段。假设LINQ生成的类名为DatabaseRow
,我想添加几个bool
值供内部使用:
public class ExtendedDatabaseRow: DatabaseRow
{
public bool ReadyToWrite;
public bool Changed;
}
这在代码中工作正常:我可以创建类型为ExtendedDatabaseRow
的对象等。但是,我想将这些对象写回数据库。假设我想将对象changedRow
(类型为ExtendedDatabaseRow
)写回数据库:
DataClassesDataContext dc = new DataClassesDataContext();
DatabaseRow newrow = (DatabaseRow) changedRow; // "Cast" the extended object back to the base type
dc.DatabaseRows.InsertOnSubmit(newrow);
dc.SubmitChanges();
这会引发错误
对象引用未设置为对象的实例。
尝试InsertOnSubmit
。
我可以创建一个新的DatabaseRow
对象并从源对象复制每个参数,但这对我来说似乎有些混乱。我可以简单地将扩展对象强制转换回基础对象,如果是这样,我做错了什么?或者我正在做的很好,错误是更具LINQ特定的东西?
我对C#还是很陌生,特别是使用的术语,如果这是一个愚蠢的问题,请提前道歉。
答案 0 :(得分:6)
您不需要派生新类来扩展Linq To Sql实体,出于这个原因,类被标记为partial
,例如。
public partial class DatabaseRow
{
public bool ReadyToWrite { get; set; }
public bool Changed { get; set; }
}
这是扩展设计器生成的数据库实体的recommended方式,意味着您不必进行强制转换。
答案 1 :(得分:1)
IIRC,LINQ-to-SQL创建了部分类,因此您可以通过这种方式扩展它;这可能是扩展LINQ-to-SQL类的默认方式。
那就是说,我不明白为什么你会在那里得到Null参考。您是否已逐步完成代码以检查插入时newrow
是否为空?