gpt4 book ai didi

c# - ASP.net MVC Linq-to-SQL 插入问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:33:28 25 4
gpt4 key购买 nike

TLDR 总结

我在使用 ASP.net MVC 的 InsertOnSubmit() 函数时遇到了一些问题。如何在不遇到键约束的情况下构建新对象并将其插入数据库?

重现步骤

我已经为我一直遇到的 3 个左右的主要问题创建了一个简单的演示,也许有人可以在这里帮助我。

  1. 创建一个新的 ASP.net MVC 2 项目。
  2. 创建两个表 - 具有一对多关系的实验和结果(如下所示)。
  3. 在 Home Controller 中创建一个名为“RunExperiment”的新操作。
  4. 创建一个基本的 linq-to-sql 数据上下文。
  5. 让 RunExperiment 生成新的实验和结果,并通过新的数据上下文将它们插入数据库。

这个过程很快就会崩溃,因为需要发生一些魔法来防止主键重复以确保依赖关系保持完整。

Example image of database setup.

现在看看我的示例“RunExperiment”函数:

    public ActionResult RunExperiment(string Title, string Scientist)
{
RepositoryDataContext RDC = new RepositoryDataContext();

// Generate the experiment
Experiment thisExperiment = new Experiment();
thisExperiment.experimentTitle = Title;
thisExperiment.experimentScientist = Scientist;

// Perform some work.
System.Threading.Thread.Sleep(500);

// Attempt to insert the experiment.
// Works once, fails subsequently due to duplicate primary key.
RDC.Experiments.InsertOnSubmit(thisExperiment);
RDC.SubmitChanges();

for (int i = 0; i < 5; i++)
{
Result thisResult = new Result();
thisResult.resultDate = DateTime.Now;
thisResult.resultTemp = i;
thisResult.Experiment = thisExperiment;

RDC.Results.InsertOnSubmit(thisResult);
RDC.SubmitChanges();
}

return View("Index");
}

有什么想法吗?我知道这是基本的东西,但我正在努力避免仅仅复制 Nerd Dinner 模式,但我遇到了这些错误。

谢谢!

最佳答案

您能否确认您在 SQL Server 中的 experimentId 列的设置 - 我认为这应该设置为:

[experimentId] [int] IDENTITY(1,1) NOT NULL

当我删除 IDENTITY

时,我能够重现您的错误

在 LINQ to SQL 中,列的属性在“服务器数据类型”属性中应该有 Int NOT NULL IDENTITY

关于c# - ASP.net MVC Linq-to-SQL 插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com