I've made a simple Entity Framework ASP Core Application that works but I do not know why:
I've made a context like this:
public class AstootContext : DbContext
{
public AstootContext(DbContextOptions<AstootContext> options)
: base(options)
{ }
public DbSet<Account> Accounts { get; set; }
public DbSet<User> Users { get; set; }
}
And I have two tables with models like this:
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; }
}
The interesting thing is that when I run my application it actually can pick up the data. It just seems weird because I have not specified any table mapping. I'm assuming this just automaps because the specified tables are the same name.
My questions are:
How do I specify Table explicit table mapping in case I do not want my model names to be exactly the same as the DB?
How do I specify Custom Column Mapping.
Is there anything special I have to specify for Primary/Foreign Keys
edit
To clarify
Say I had a table in the DB MyAccounts
and I wanted to map that to an entity Accounts
.
Say I had a column password
and I wanted that to map to a POCO property PasswordHash
To specify the name of the database table, you can use an attribute or the fluent API:
Using Attributes:
[Table("MyAccountsTable")] public class Account { public string PasswordHash { get; set; } }
Using Fluent API:
public class YourContext : DbContext { protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Language>(entity => { entity.ToTable("MyAccountsTable"); }); } }
To name your columns manually, it's very similar and you can use an attribute or the fluent API:
Using Attributes:
public class Account { [Column("MyPasswordHashColumn")] public string PasswordHash { get; set; } }
Using 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") ); } }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.