TLDR 总结
我在使用 ASP.net MVC 的 InsertOnSubmit() 函数时遇到了一些问题。如何在不遇到关键约束的情况下构建新对象并将其插入数据库?
重现步骤
我已经继续并创建了一个简单的演示,展示了我遇到的 3 个左右的主要问题,也许有人可以在这里帮助我。
- 创建一个新的 ASP.net MVC 2 项目。
- 创建两个表 - 具有一对多关系的实验和结果(如下所示)。
- 在 Home 控制器中创建一个名为“RunExperiment”的新操作。
- 创建一个基本的 linq-to-sql 数据上下文。
- 让 RunExperiment 生成一个新的实验和结果,并通过新的数据上下文将它们插入到数据库中。
这个过程很快就崩溃了,因为需要发生一些魔法来防止重复的主键并确保依赖关系保持不变。
现在看看我的示例“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 模式,但我遇到了这些错误。
谢谢!