joh*_*y 5 12 sql entity-framework-core asp.net-core
我已经制作了一个简单的实体框架ASP核心应用程序,但我不知道为什么:
我做了这样的上下文:
public class AstootContext : DbContext
{
public AstootContext(DbContextOptions<AstootContext> options)
: base(options)
{ }
public DbSet<Account> Accounts { get; set; }
public DbSet<User> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有两个表格,这样的模型:
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; }
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我运行我的应用程序时,它实际上可以获取数据.它看起来很奇怪,因为我没有指定任何表映射.我假设这只是自动化,因为指定的表是相同的名称.
我的问题是:
如果我不希望模型名称与数据库完全相同,如何指定表显式表映射?
如何指定自定义列映射.
我必须为主键/外键指定什么特别的东西
编辑
澄清
说我在DB MyAccounts中有一张表,我想把它映射到一个实体账户.
假设我有一个列密码,我希望它映射到POCO属性PasswordHash
Dav*_*idG 15
要指定数据库表的名称,可以使用属性或流畅的API:
使用属性:
[Table("MyAccountsTable")]
public class Account
{
public string PasswordHash { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用Fluent API:
public class YourContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Language>(entity => {
entity.ToTable("MyAccountsTable");
});
}
}
Run Code Online (Sandbox Code Playgroud)要手动命名列,它非常相似,您可以使用属性或流畅的API:
使用属性:
public class Account
{
[Column("MyPasswordHashColumn")]
public string PasswordHash { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用Fluent API:
public class YourContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Language>(x => x
.ToTable("MyAccountsTable")
.Property(entity => entity.PasswordHash)
.HasField("MyPasswordHashColumn")
);
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
8783 次 |
| 最近记录: |