我确实查看了已回答的相关帖子,但仍然在 InsertOnSubmit()
中遇到 NullReference
异常。
我有一个自动生成的 LINQ
类 Transaction,我从中创建了一个重写 ToString()
的派生类:
public partial class MyTransaction:DataAccess.Transaction
{
public MyTransaction():base()
{
}
public override string ToString()
{
return "some text";
}
}
插入内容如下:
public bool InsertTransaction(Transaction t)
{
using (MarketPricesDataContext dataContext = new MarketPricesDataContext(connectionString))
{
try
{
dataContext.Transaction.InsertOnSubmit(t);
dataContext.SubmitChanges();
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return false;
}
}
}
我认为从 MyTransaction
调用基本构造函数可以解决我的问题,但事实并非如此。我可以插入事务项,但当我尝试插入 MyTransaction
项时,我收到 NullReferenceException
。
这有效:
Transaction t=new Transaction();
t.Type="A"; //set some values
Data d=new Data();
d.InsertTransaction(t);
这会在 InsertOnSubmit()
中抛出 NullReferenceException
(对象引用未设置为对象的实例。):
MyTransaction myt=new MyTransaction();
myt.Type="A"; //set some values
Data d=new Data();
d.InsertTransaction(myt as Transaction);
我做错了什么?
最佳答案
LINQ-to-SQL 已支持继承,但仅限于模型中的类型。我想它正在模型中寻找您的自定义类型(以找到适当的表或鉴别器),但失败了。
简而言之,我认为您不能使用不模型一部分的子类型。
但是,类型是部分
;你应该能够做到:
namespace MyTransaction:DataAccess {
partial class Transaction {
public override string ToString() {
return "some text";
}
}
}
它将您的 ToString()
重写添加到生成的类型中。
关于c# - 派生类导致 InsertOnSubmit() 抛出 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3675847/