微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF迁移正在使用null

如何解决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 举报,一经查实,本站将立刻删除。