向DbSet添加新实体时出现实体框架错误

时间:2016-02-23 10:07:00

标签: c# sql-server entity-framework savechanges

我有以下问题:

我创建了一个班级Actual。这是表格的映射:

    ToTable("actuals");
    HasKey(x => x.Id);
    Property(x => x.Id).HasColumnName("actuals_sk");
    ...;
    Property(x => x.PersonId).HasColumnName("actuals_by_sk");
    Property(x => x.AssignmentId).HasColumnName("evaluation_task_id");
    Property(x => x.JobCodeId).HasColumnName("job_cd_sk");
    Property(x => x.ProjectId).HasColumnName("is_sk");

现在,当我执行DbSet.Add(entity)实体是actual实例时,我不断收到同样的错误:

  

无法将值NULL插入列'person_sk',表'aariworx_app.dbo.person';列不允许空值。 INSERT失败。

现在奇怪的是,我在映射属性时提供了所有必要的实体。

 Person person = new Person() 
                     { Id = 77, 
                       Name = actualVM.Person.Name, 
                       CreationDate = new DateTime(2014, 02, 04, 19, 53, 08, 000), 
                       User = actualVM.Person.UserName, 
                       Active = 1, 
                       ContractHrs = 38, 
                       ContractDays = Convert.ToDecimal("5,00"), 
                       HoursFullDay = Convert.ToDecimal("7,60"), 
                       HoursHalfDay = Convert.ToDecimal("3,80"), 
                       MaxMoreHours = 80, 
                       WarnMoreHours = 70, 
                       Freelancer = 0, 
                       AuthMethod = Model.Utils.AuthMethod.AD,  
                       EmailSend = 0, 
                       HourlyCost = 45 };
        Assignment assignment = new Assignment() { Id = 3, Description = "Projectleiding", DTS = new DateTime(2006, 1, 5, 18, 30, 6, 000) };
        JobCode jobCode = new JobCode() { Id = actualVM.JobCode.JobCodeId, Description = actualVM.JobCode.Description, CostCenter = 10, CostType = "F", LongDescription = "Ontwikkeling van de aariXa-website", Closed = 0, Date = new DateTime(2007, 5, 16, 2, 23, 12, 000) };
        Project project = new Project() { Id = actualVM.Project.ProjectId, Description = actualVM.Project.Project, Date = new DateTime(2007, 5, 16, 2, 23, 12, 000) };

        return new Actual()
        {
            Id = actualVM.Id,
            ...,
            Assignment = assignment ,
            AssignmentId = assignment.Id,
            JobCode = jobCode,
            JobCodeId = jobCode.Id,
            Project = project,
            ProjectId = project.Id,
            Person = person,
            PersonId = person.Id                
        };

所以我不知道出了什么问题。

当我查看正在执行的查询时,会发生一个INSERT,我不需要,因为此人已经存在。

任何人都可以帮助我吗?

我注意到当我执行savechanges将我的“actual”保存到数据库时,以下查询也会被执行,我不明白为什么:

INSERT [dbo].[person]([name], [user], [person_DTS], [pwd], [active_yn], [contract_hrs], [contract_days], [hours_full_day], [hours_half_day], [max_more_hours], [warn_more_hours], [freelancer_yn], [auth_method], [email_sent], [artikel_aarifact], [Uurkost]) 
VALUES (@0, @1, @2, NULL, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, NULL, @13) 

SELECT [person_sk] 
FROM [dbo].[person] 
WHERE @@ROWCOUNT > 0 AND [person_sk] = scope_identity()

由于我传递了此人的身份证明,因此我不明白为什么查询应该使用scope_identity()

0 个答案:

没有答案