我有 User 和 Customer 表。 User 表具有 Username 的 PK,并且是 Customer 表中的 FK。 我想将客户和用户输入的详细信息添加到数据库中,用户的用户名(主键)是客户表中的外键
关于为什么客户表中的用户名(FK)为空的问题
用户:
public class User
{
[Key]
public string Username { get; set; }
public string Password { get; set; }
}
客户:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public User User { get; set; }
}
DBContext:
class StoreContext : DbContext
{
readonly string connectionString = @"Data source=...;Integrated security=true;Initial Catalog=dbPizzaOrderingV1";
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(connectionString);
}
public DbSet<User> Users { get; set; }
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
}
}
管理客户:
class ManageCustomer
{
StoreContext context;
public ManageCustomer()
{
context = new StoreContext();
}
public bool AddUser(User user)
{
context.Users.Add(user);
context.SaveChanges();
return true;
}
public bool AddCustomer(Customer customer)
{
context.Customers.Add(customer);
context.SaveChanges();
return true;
}
计划:
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);
manageCustomer.AddCustomer(customer);
Console.WriteLine("Created Account Successfully!");
}
用户详细信息和客户详细信息成功添加到表中,但客户表中的用户名(FK)为空。 我该如何解决?
答案 0 :(得分:0)
将 public string UserId { get; set; }
添加到 Customer 类。而 User
属性必须是 virtual
。
文档:https://docs.microsoft.com/en-us/ef/ef6/fundamentals/relationships
答案 1 :(得分:0)
修复类
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Username { get; set; }
[ForeignKey(nameof(UserName))]
[InverseProperty("Customers")]
public virtual User User { get; set; }
}
public class User
{
[Key]
public string Username { get; set; }
public string Password { get; set; }
[InverseProperty(nameof(Customer.User))]
public virtual ICollection Customers {get; set;}
}
和代码
//customer.UserName=user.UserName;
customer.User =user;
manageCustomer.AddCustomer(customer);
或者你也可以试试这个
manageUser.AddUser(user);
customer.UserName=user.UserName;
manageCustomer.AddCustomer(customer);
恕我直言,您必须添加整数 Id 作为用户表的键。没有这个 User 表看起来很奇怪,EF 很困惑。您将无法轻松更改用户名,因为它是主键。也许你还需要添加一些流畅的 API
答案 2 :(得分:0)
我通过正确定义Username的外键解决了问题
class User
{
[Key]
public string Username { get; set; }
public string Password { get; set; }
public virtual Customer Customer{ get; set; }
}
class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Username { get; set; }
[ForeignKey(nameof(Username))]
public virtual User User { get; set; }
}