c# - 派生类导致 InsertOnSubmit() 抛出 NullReferenceException

标签 c# linq linq-to-sql nullreferenceexception

我确实查看了已回答的相关帖子,但仍然在 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/

相关文章:

c# - 工具提示气球在 5 秒后消失

c# - 如何判断 Linq 对象是否已附加到数据上下文?

c# - 两个选择计数查询之间的linq差异

sql - 如何在 Linq2Sql 中编写此查询

c# - 如何使用 LINQ to SQL 从 ID 值列表中获取结果列表?

java - 我试图在 java 中重新创建这个 C# 代码来调用我的 web api make i ASP.NET

c# - 如何使用 Microsoft Fakes 来填充异步任务方法?

c# - 有没有办法省略参数?

c# - 无法创建类型为 'xxx' 的常量值。在此上下文中仅支持原始类型或枚举类型

.net - LINQ to SQL 查询中的 C# 动态 WHERE 子句