如何指定实体框架核心表映射?

时间:2017-02-12 17:36:50

标签: sql asp.net-core entity-framework-core

我制作了一个简单的实体框架ASP核心应用程序,但是我不知道为什么会这样做:

我做了这样的背景:

 declareParameter(new SqlOutParameter('l_out', OracleTypes.ARRAY, 'NAMELIST',
                new SqlReturnArray()));

我有两张表格,如下所示:

public class AstootContext : DbContext
{
    public AstootContext(DbContextOptions<AstootContext> options)
        : base(options)
    { }

    public DbSet<Account> Accounts { get; set; }
    public DbSet<User> Users { get; set; }
}

有趣的是,当我运行我的应用程序时,它实际上可以获取数据。它看起来很奇怪,因为我没有指定任何表映射。 我假设这只是自动化,因为指定的表名称相同。

我的问题是:

  1. 如果我不希望我的模型名称与数据库完全相同,如何指定表显式表映射?

  2. 如何指定自定义列映射。

  3. 我必须为主/外键指定什么特别的

  4. 修改

    澄清

    1. 说我在DB MyAccounts中有一张表,我想将其映射到实体帐户。

    2. 说我有一个列密码,我想要映射到POCO属性PasswordHash

1 个答案:

答案 0 :(得分:10)

  1. 要指定数据库表的名称,可以使用属性或流畅的API:

    使用属性:

    [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");
            });
        }
    }
    
  2. 要手动命名列,它非常相似,您可以使用属性或流畅的API:

    使用属性:

    public class Account
    {
        [Column("MyPasswordHashColumn")]
        public string PasswordHash { get; set; }
    
    }
    

    使用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")
            );
        }
    }