【发布时间】:2013-01-27 15:09:06
【问题描述】:
我遇到了这个奇怪的问题,花费的时间比它应该的要长。
我的主要问题是: 在添加实体时,什么可能导致 EF 4.1 Code First 将外键设置为 NULL?
问题是这样的:我有一个用户列表,如果这些用户不存在,则必须将它们插入到我的数据库中。
我有这样的事情:
foreach (var u in usersFromFile) {
var userProfile = context.Users
.FirstOrDefault(user=>
user.EmployeeId == u.EmployeeId && user.CompanyId == 1);
if (userProfile == null) {
User newUser = new User();
newUser.EmployeeId = u.EmployeeId;
newUser.CompanyId = 1;
context.Users.Add(newUser); //This will sometimes set CompanyId = NULL
}
}
context.SaveChanges();
某些用户无法正确添加到用户表中。 他们得到 CompanyId == NULL,因此他们不属于公司。
我也试过像这样直接注入 SQL:
var query = @"INSERT INTO [dbo].[Users]
([CompanyId],[EmployeeId]) VALUES (3,@emplid)";
context.Database.ExecuteSqlCommand(query, new SqlParameter[] {
new SqlParameter("emplid", u.EmployeeId)});
- 我试图访问公司对象上的用户列表。那是行不通的。
- 我尝试使用 context.Users.Create() 而不是 new User()。不会改变任何东西。
- 我试过注入SQL,还是同样的问题。如果从 Studio Manager 运行,则该确切的 SQL 有效。
- 每次添加后我都尝试过 context.SaveChanges(),没有任何改变。
我知道要添加的实体的状态是正确的,在 CompanyId 设置为 NULL 的情况下也是如此。 我的底层数据库可能有问题吗?
非常感谢您的宝贵时间和帮助!
【问题讨论】:
标签: c# sql entity-framework