必要以上に多くの時間を費やしたこの奇妙な問題があります。
私の主な質問は次のとおり です。エンティティが追加されたときに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)});
- Company オブジェクトの Users リストにアクセスしようとしました。それはうまくいきません。
- new User() の代わりに context.Users.Create() を使用しようとしました。何も変更しません。
- 私はSQLを注入しようとしましたが、それでも同じ問題です。Studio Manager から実行すると、その正確な SQL が機能します。
- 追加するたびに context.SaveChanges() を試みましたが、何も変わりませんでした。
CompanyId が NULL に設定されている場合でも、追加しようとしているエンティティの状態が正しいことはわかっています。基盤となるデータベースに問題がある可能性はありますか?
お時間をいただき、ありがとうございました。