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
Map Entity to Table. Code-First will create the database tables with the name of DbSet properties in the context class, Students and Standards in this case. You can override this convention and give a different table name than the DbSet properties, as shown below.
Keep using EF6 if the data access code is stable and not likely to evolve or need new features. Port to EF Core if the data access code is evolving or if the app needs new features only available in EF Core. Porting to EF Core is also often done for performance.
Configuring a primary key By convention, a property named Id or <type name>Id will be configured as the primary key of an entity. Owned entity types use different rules to define keys. You can configure a single property to be the primary key of an entity as follows: Data Annotations.
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) .HasColumnName("MyPasswordHashColumn") ); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With