Entity Framework Core插入数据时Customer表外键Username为NULL如何解决
问题原因
你没有在代码中建立Customer和User实例的关联关系,EF Core无法自动识别两个实体的绑定逻辑,自然不会填充外键字段。
修复步骤
1. 完善Customer实体(可选但推荐)
在Customer类中显式声明外键字段,避免EF Core生成隐式外键导致逻辑不可控:
public class Customer { public int Id { get; set; } public string Name { get; set; } // 显式声明外键,对应User表的主键Username public string Username { get; set; } public User User { get; set; } }
2. 调整执行逻辑,关联两个实体
保存User之后,将User实例绑定到Customer的导航属性上即可:
public void CreateAccount() { Customer customer = new Customer(); User user = new User(); Console.WriteLine("Create Account"); Console.WriteLine("Enter Your Name: "); customer.Name = Console.ReadLine(); Console.WriteLine("Enter Username: "); user.Username = Console.ReadLine(); Console.WriteLine("Enter Password: "); user.Password = Console.ReadLine(); manageCustomer.AddUser(user); // 新增关联逻辑,也可以直接写customer.Username = user.Username customer.User = user; manageCustomer.AddCustomer(customer); Console.WriteLine("Created Account Successfully!"); }
可选优化:减少数据库交互次数
你当前的代码会两次访问数据库提交数据,可以调整业务方法合并提交,EF Core会自动处理插入顺序,保证外键正常写入:
首先调整ManageCustomer类,新增联合插入方法:
public bool AddCustomerWithUser(Customer customer, User user) { customer.User = user; context.Users.Add(user); context.Customers.Add(customer); // 一次提交即可,EF会自动先插入User,再插入带外键的Customer context.SaveChanges(); return true; }
之后在CreateAccount方法中直接调用该方法即可,无需分开调用AddUser和AddCustomer。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

