我确实查看了已回答的相关帖子,但仍然在NullReference
中获得InsertOnSubmit()
例外。
我有一个自动生成的LINQ
类事务,我从中创建一个覆盖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);
这会在NullReferenceException
中抛出InsertOnSubmit()
(对象引用未设置为对象的实例。)
MyTransaction myt=new MyTransaction();
myt.Type="A"; //set some values
Data d=new Data();
d.InsertTransaction(myt as Transaction);
我做错了什么?
答案 0 :(得分:2)
LINQ-to-SQL已经支持继承,但仅适用于模型中的类型。我想它正在模型中寻找你的自定义类型(找到合适的表或鉴别器),然后失败。
简而言之,我认为您不能使用不是模型的一部分的子类型。
但是,类型为partial
;你应该能够做到:
namespace MyTransaction:DataAccess {
partial class Transaction {
public override string ToString() {
return "some text";
}
}
}
将您的ToString()
覆盖添加到生成的类型中。
答案 1 :(得分:1)
感谢Marc指出我正确的方向。为了解决这个问题,我取消了MyTransaction
类,并在DataAccess
命名空间中,包含DataContext
和Linq-to-SQL类的类,我重写ToString()
如下:
namespace DataMining.DataAccess
{
public partial class Transaction
{
public override string ToString()
{
return "some text";
}
}
}
我现在使用Transaction
之前我曾使用MyTransaction
。