我已经制作了一个简单的Entity Framework ASP Core Application,它可以工作,但是我不知道为什么:
我做了这样的上下文:
public class AstootContext : DbContext { public AstootContext(DbContextOptions<AstootContext> options) : base(options) { } public DbSet<Account> Accounts { get; set; } public DbSet<User> Users { get; set; } }
我有两个表,像这样的模型:
public class Account { public int Id { get; set; } public string Username { get; set; } public string PasswordHash { get; set; } public DateTime Created { get; set; } List<User> Users { get; set; } } public class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } public DateTime Birthday { get; set; } public Account Account { get; set; } }
有趣的是,当我运行我的应用程序时,它实际上可以拾取数据。似乎很奇怪,因为我没有指定任何表映射。我假设这只是自动映射,因为指定的表具有相同的名称。
我的问题是:
如果我不希望模型名称与数据库完全相同,该如何指定表显式表映射?
如何指定自定义列映射。
我必须为主/外键指定什么特别的东西吗
编辑
澄清
说我在数据库MyAccounts中有一个表,我想将该表映射到实体Accounts。
假设我有一个列密码,并且希望该密码映射到POCO属性PasswordHash
使用属性:
[Table("MyAccountsTable")] public class Account { public string PasswordHash { get; set; } }
使用Fluent API:
public class YourContext : DbContext { protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Language>(entity => { entity.ToTable("MyAccountsTable"); }); } }
public class Account { [Column("MyPasswordHashColumn")] public string PasswordHash { get; set; } }
public class YourContext : DbContext { protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Language>(x => x .ToTable("MyAccountsTable") .Property(entity => entity.PasswordHash) .HasField("MyPasswordHashColumn") ); } }