如何解决EF迁移正在使用null
我有一个类似于以下的用户和密码模型。密码模型是新的,用户模型上的密码属性也是新的。
public class Password {
public int PasswordID { get; set; }
public string HashedPassword { get; set; }
public DateTime LastUpdated { get; set; }
}
public class User {
public int UserID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public Password Password { get; set; }
}
我正在尝试更新EF迁移,该迁移将使用现有用户并使用新的Password外键相应地更新他们,同时还在Password表中创建相应的行。我的configuration.cs看起来像这样...
var Users = new List<User> {
new User() { Name = "Donald",Surname = "Duck",Password = new Password() { HashedPassword = "somehashedstring",LastUpdated = DateTime.Now }},...
}
Users.ForEach(a => context.Users.AddOrUpdate(b => new { b.Name,b.Surname },a));
context.SaveChanges();
编辑:显然,“名称”和“姓氏”组合不应将行定义为唯一行,但暂时可以。这不是生产应用程序。
但是我发现在运行update-database
之后,sql中的最终用户表在Password_PasswordID列中包含NULL,并且Password表为空。我觉得我已经按照文档和指南进行操作了,但是显然我一定在某个地方出错了。如果您需要任何其他信息,请询问!
任何帮助将不胜感激。
解决方法
我尝试将其作为注释,但是我的声誉很低,因此希望对您的代码有所帮助。 我最近完成了类似您的任务,并成功完成了任务。
从视觉上看,用户和密码模型对我来说是正确的。因此,我建议调试一下:
首先-检查外键是否按EF迁移和EF更新数据库命令的预期生成。我在Visual Studio中使用SQL Server对象资源管理器进行检查。 检查这篇文章中DepartmentId的图像 big O notation
第二-这是我针对您的案例的DatabaseSeeder类,但我尚未对其进行编译。如果这对您有用,那么您可以尝试将其缩短。
public static class DatabaseSeeder
{
public static void SeedData(AppDbContext context)
{
if (context.User.Any(m => m.FooId == "foo"))
{
// or any checks to avoid overwriting your data - Optional
return;
}
var userA = new User
{
Name = "Donald",Surname = "Duck",Password = new Password
{
HashedPassword = "somehashedstring",LastUpdated = DateTime.Now
}
};
var userB = new User
{
Name = "DonaldB",Surname = "DuckB",LastUpdated = DateTime.Now
}
};
var users = new List<User>
{
userA,userB
};
context.Partners.AddRange(users);
context.SaveChanges();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。