我有以下问题:
我创建了一个班级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()