如何指定實體框架核心表映射?

asp.net-core entity-framework-core sql

我已經製作了一個簡單的實體框架ASP核心應用程序,但我不知道為什麼:

我做了這樣的上下文:

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; }
}

有趣的是,當我運行我的應用程序時,它實際上可以獲取數據。這看起來很奇怪,因為我沒有指定任何表映射。我假設這只是自動化,因為指定的表是相同的名稱。

我的問題是:

  1. 如果我不希望模型名稱與數據庫完全相同,如何指定表顯式表映射?

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

  3. 我必須為主鍵/外鍵指定什麼特別的東西

編輯

澄清

  1. 說我在DB MyAccounts中有一張表,我想把它映射到一個實體賬戶。

  2. 假設我有一個列密碼,我希望它映射到POCO屬性PasswordHash

一般承認的答案

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow