繁体   English   中英

使用Linq-to-SQL的INSERT上的外键异常,但不知道为什么吗?

[英]Foreign key exception on INSERT with Linq-to-SQL but can't figure out why?

INSERT语句与FOREIGN KEY约束“ FK_JobList_aspnet_Membership”冲突。 数据库“ C:\\ JOBPOST \\ APP_DATA \\ ASPNETDB.MDF”的表“ dbo.aspnet_Membership”的“ UserId”列中发生冲突。该语句已终止。

我的FK_JobList_aspnet_Membership设置是:

  • 主表( aspnet_membership
  • 外键表( JobList
  • 对两个表都使用列UserId(uniqueidentifier) ,当前仅设置2个UserId

JobList具有自动索引的主键int JobId 对插入和更新属性无操作,将删除设置为级联

在dbml中,我还为JobList表设置了UpdateCheck=UpdateCheck.Never

我不明白为什么会发生异常,因为我在用户登录后使用了会员服务。 它应该没有冲突。 顺便说一句,我确定插入项目没有其他重复功能。 尽管抛出异常,但是新行数据已使用正确的userId成功插入。 每次插入Item时,都会不断抛出这种异常。

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)Membership.GetUser(User.Identity.Name).ProviderUserKey不会出现在aspnet_membership表中。

这可能是因为Membership.GetUser(User.Identity.Name)未找到当前用户。 反过来这可能是因为User.Identity.Name也不在aspnet_membership表中。

建议的分辨率:

  • 输出User.Identity.Name。 一种方法是throw new Exception(User.Identity.Name)
  • 检查名称是否出现在成员资格表中。

当您不可避免地发现它不是时,可以从那里继续进行调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM