当前位置:  开发笔记 > 编程语言 > 正文

LINQ InsertOnSubmit:NullReferenceException

如何解决《LINQInsertOnSubmit:NullReferenceException》经验,为你挑选了3个好方法。

我有这个代码:

using DC = MV6DataContext;
using MV6; // Business Logic Layer
// ...

public DC.MV6DataContext dc = new DC.MV6DataContext(ConnectionString);
IP ip = new IP(Request.UserHostAddress);
dc.IPs.InsertOnSubmit(ip);
dc.SubmitChanges();

// in Business Logic layer:
public class IP : DC.IP {
  public IP(string address) { ... }
}

在尝试InsertOnSubmit(ip)时,我得到一个NullReferenceException(对象引用未设置为对象的实例).dc不为空; ip和ip的所有属性都不为null; 虽然有些是空的.

VS2008不会让我进入InsertOnSubmit,因此在评估时我无法知道具体为null.是什么赋予了?

注意:我已经检查过,并且由FK关系创建的所有Linq.EntitySets都存在且非空.



1> 小智..:

实际上最好添加对构造函数的调用,该构造函数也调用泛型构造函数,例如:

public IP(string address) : this() {
...
}



2> tsilb..:

得到它了.

我没有创建一个继承自DataContext类的类,而是使用业务逻辑层中的部分类扩展DC类本身.从那里我可以添加我想要的任何构造函数和方法.

在这种情况下,有必要从现有(自动生成)构造函数中复制代码:

public IP(string address) {
Address = address;
Domain = "";
Notes = "";
FirstAccess = DateTime.Now;
LastAccess = DateTime.Now;
this._Sessions = new EntitySet(new Action(this.attach_Sessions), new Action(this.detach_Sessions));
OnCreated(); }

不确定那个OnCreated处理程序中有什么,但它似乎正在做我之前的工作.工作正常:)


我认为调用自动生成的构造函数(使用:this())比复制粘贴更好.

3> user64648..:

由于默认构造函数已初始化base(),this._Sessions并运行OnCreated方法,因此您需要在扩展构造函数中执行以下操作:

public IP(string address) : this()
{
    Address = address;
    Domain = "";
    Notes = "";
    FirstAccess = DateTime.Now;
    LastAccess = DateTime.Now;
}

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有