Исключение внешнего ключа для INSERT с Linq-to-SQL, но не могу понять, почему? - PullRequest
0 голосов
/ 20 марта 2011

Оператор 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.Никаких действий при вставке и обновлении атрибута. Удалите для параметра Cascade

. В dbml я также установил UpdateCheck=UpdateCheck.Never для JobList Таблица

Я не понимаю, почему возникает исключение, посколькуЯ использую сервис членства после входа пользователя.Это не должно иметь никакого конфликта.Кстати, я уверен, что нет другой дублирующей функции для вставки элемента.Несмотря на исключение, новые данные строки были успешно вставлены с правильным идентификатором пользователя.Каждый раз при вставке элемента он выдает такое исключение.

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();          
     } 
}

1 Ответ

0 голосов
/ 20 марта 2011

Это означает, что guid, возвращаемый (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey, не отображается в таблице aspnet_membership.

Возможно, это связано с тем, что Membership.GetUser(User.Identity.Name) не находит текущего пользователя.В свою очередь это, вероятно, связано с тем, что User.Identity.Name также отсутствует в таблице aspnet_membership.

Предлагаемое разрешение:

  • output User.Identity.NameОдин из способов сделать это - throw new Exception(User.Identity.Name)
  • Проверить, что имя отображается в таблице членства.

Когда вы неизбежно обнаружите, что это не так, вы можете продолжить отладку сесть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...