编辑
好吧,我在代码方面所做的一切都是正确的,我把关系放在表格上是错误的!
问题
从任务到消息,我有一对一的关系。插入新项目时,我遇到外键违规。
细节:
数据库结构
Task
ID (Primary Key, Guid, Default = NEWID())
MessageID (Unique Index with foreign key pointing to Message.ID)
Message
ID (Primary Key, Guid, Default = NEWID())
每个表上主键的 dbml 设置都将 Auto Generate Value 设置为true
,Auto-Sync 设置为OnInsert
我有以下代码来插入新对象
var objMessage = new Data.Message()
{
Body = "",
Subject = ""
};
Context.Messages.InsertOnSubmit(objMessage);
var objTask = new Data.Task()
{
Message = objMessage
};
Context.Tasks.InsertOnSubmit(objTask);
Context.SubmitChanges();
这会引发 SQL 错误外键约束被违反。
SQL 分析显示 linq to sql 在消息之前插入任务,因为它需要消息中的 id,所以它无法执行此操作,因此这当然会导致外键违规。
我在哪里错了?