C# 使用Linq to SQL插入时出现外键异常,但可以';我不明白为什么?
INSERT语句与冲突 外键约束 “FK_工作清单_aspnet_会员资格”。这个 数据库中发生冲突 “C:\JOBPOST\APP\u DATA\ASPNETDB.MDF”, 表“dbo.aspnet_成员资格”,第列 “UserId”。该语句已被删除 终止 我的FK_工作列表_aspnet_成员设置为:C# 使用Linq to SQL插入时出现外键异常,但可以';我不明白为什么?,c#,asp.net,sql,C#,Asp.net,Sql,INSERT语句与冲突 外键约束 “FK_工作清单_aspnet_会员资格”。这个 数据库中发生冲突 “C:\JOBPOST\APP\u DATA\ASPNETDB.MDF”, 表“dbo.aspnet_成员资格”,第列 “UserId”。该语句已被删除 终止 我的FK_工作列表_aspnet_成员设置为: 主表(aspnet\u成员资格) 外键表(作业列表) 对两个表使用列UserId(uniqueidentifier),当前仅设置2个UserId JobList具有自动索引主键intJo
- 主表(
)aspnet\u成员资格
- 外键表(
)作业列表
- 对两个表使用列
,当前仅设置2个UserIdUserId(uniqueidentifier)
JobList
具有自动索引主键intJobId
。对插入和更新属性不执行任何操作,删除设置为级联
在dbml中,我还为JobList
表设置了UpdateCheck=UpdateCheck.Never
我不明白为什么会发生这种异常,因为我在用户登录后使用会员服务。它应该没有冲突。顺便说一句,我相信没有其他重复的功能插入项目。虽然抛出异常,但新行数据已使用正确的用户ID成功插入。每次插入项目时,它都会不断抛出此类异常
protected void LinqDataSourceDetail_Inserting(object sender, LinqDataSourceInsertEventArgs e)
{
if (Page.IsValid == true)
{
JobPostDataContext db = new JobPostDataContext();
JobList newJob = new JobList();
newJob.JobTitle = ((TextBox)DetailsView1.FindControl("TB_JobTitle")).Text;
newJob.Summary = ((TextBox)DetailsView1.FindControl("TB_Summary")).Text;
newJob.Detail = ((TextBox)DetailsView1.FindControl("TB_Detail")).Text;
newJob.CompanyName = ((TextBox)DetailsView1.FindControl("TB_CompanyName")).Text;
newJob.CompanyEmail = ((TextBox)DetailsView1.FindControl("TB_CompanyEmail")).Text;
String date = ((TextBox)DetailsView1.FindControl("TB_PostDate")).Text;
newJob.PostDate = (DateTime)Convert.ToDateTime(date);
newJob.IsTop = false;
newJob.UserId = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
db.JobLists.InsertOnSubmit(newJob);
db.SubmitChanges();
}
}
这意味着
(guid)Membership.GetUser(User.Identity.Name).ProviderUserKey返回的guid不会出现在aspnet\u Membership
表中
这可能是因为Membership.GetUser(User.Identity.Name)
找不到当前用户。这可能是因为User.Identity.Name
也不在aspnet\u成员资格表中
建议的决议:
- 输出User.Identity.Name。一种方法是
抛出新异常(User.Identity.Name)
- 检查该名称是否显示在成员资格表中
当您不可避免地发现它不存在时,您可以从那里继续调试。您确定它没有将NULL插入为FK吗?如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮({}
)在编辑器工具栏上很好地格式化和语法突出显示它!如果在带有InsertOnSubmit
的行上放置断点,并检查newJob
对象,则该UserId
是否设置为有效的GUID?该GUID是否确实存在于aspnet_成员资格表中??