当对象具有关系时,使用 LINQ to SQL 添加记录是否有秘诀?

2024-03-16

我正在使用 LINQ to SQL、ASP.NET MVC 和 C#。我有一个名为genesisRepository连接到数据库。

我有一个用名为 Stream 的对象表示的表。它的定义如下:

[Table]
public class Stream
{
    [HiddenInput(DisplayValue = false)]
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public long StreamID { get; set; }

    [Required(ErrorMessage = "Please enter a stream name")]
    [Column]
    public string StreamName { get; set; }

   /* Other columns removed for brevity */ 

    [Required(ErrorMessage = "Please enter a stream URL")]
    [Column]
    public string StreamUrl { get; set; }

    private EntitySet<StreamEntry> _StreamEntry;
    [System.Data.Linq.Mapping.Association(Storage = "_StreamEntry", OtherKey = "StreamID")]
    public EntitySet<StreamEntry> StreamEntry
    {
        get { return this._StreamEntry; }
        set { this._StreamEntry.Assign(value); }
    }

    private EntitySet<Stream2FieldTypes> _Stream2FieldTypes;
    [System.Data.Linq.Mapping.Association(Storage = "_Stream2FieldTypes", OtherKey = "StreamID")]
    public EntitySet<Stream2FieldTypes> Stream2FieldTypes
    {
        get { return this._Stream2FieldTypes; }
        set { this._Stream2FieldTypes.Assign(value); }
    }

}

我的控制器中有一个测试操作,用于在我的控制器中创建新记录Stream table.

    public ActionResult StreamTest()
    {
        // create new stream
        var stream = new Genesis.Domain.Entities.Stream();

        stream.StreamUrl = "url";
        stream.StreamName = "name";
        stream.StreamBody = null;
        stream.StreamTitle = null;
        stream.StreamKeywords = null;
        stream.StreamDescription = null;

        genesisRepository.CreateStream(stream); 

        return View("Index");
    }

功能genesisRepository()看起来像这样:

    public long CreateStream(Stream stream)
    {            
        streamTable.InsertOnSubmit(stream);
        streamTable.Context.SubmitChanges();
        return stream.StreamID;
    }

执行 ActionResult 时出现空引用错误StreamTest()。 genesisRepository 不为空。streamTable不为 null,并且新创建的对象stream显然也不为空。我唯一能想到的是空的是EntitySet<T>定义外部关系的属性。

因此,我将 ActionResult 代码修改为:

    public ActionResult StreamTest()
    {
        // create new stream
        var stream = new Genesis.Domain.Entities.Stream();

        stream.Stream2FieldTypes = new EntitySet<Stream2FieldTypes>(); // new
        stream.StreamEntry = new EntitySet<StreamEntry>(); // new
        stream.StreamUrl = "url";
        stream.StreamName = "name";
        stream.StreamBody = null;
        stream.StreamTitle = null;
        stream.StreamKeywords = null;
        stream.StreamDescription = null;

        genesisRepository.CreateStream(stream); // CreateStream() returns ID as long

        return View("Index");
    }

但是当我尝试这样做时,我收到了这个错误:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error: 
Line 58:         {
Line 59:             get { return this._Stream2FieldTypes; }
Line 60:             set { this._Stream2FieldTypes.Assign(value); } <-- the offending line
Line 61:         }
Line 62: 
Source File: C:\path\to\Stream.cs    Line: 60 

我可以使用创建新记录streamTable.Context.ExecuteCommand("INSERT INTO genesis.dbo.Stream (StreamName, StreamUrl) VALUES ('Name', 'url');");.

我不明白如何从这里继续前进。我怎样才能简单地创建一个新记录Stream?


尝试以下操作。在类声明中替换它:

public class Stream
{   
    private EntitySet<StreamEntry> _StreamEntry;
    private EntitySet<Stream2FieldTypes> _Stream2FieldTypes;
}

有了这个:

public class Stream
{   
    private EntitySet<StreamEntry> _StreamEntry = new EntitySet<StreamEntry>();
    private EntitySet<Stream2FieldTypes> _Stream2FieldTypes = new EntitySet<Stream2FieldTypes>();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当对象具有关系时,使用 LINQ to SQL 添加记录是否有秘诀? 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐