Reputation: 83
How can I map an entity framework model to multiple tables? How to perform insertion operation to specific table (by reference of string which stores the table name)?
Upvotes: 6
Views: 15043
Reputation: 766
In this case you can implement your own IModelCacheKeyFactory
, which allow to hook into the model caching mechanism so EF is able to create different models based on some value right in runtime.
Upvotes: 1
Reputation: 1897
I have not implemented this but a quick search provides many good examples of a practice known as Entity Splitting. The following should be useful:
public partial class Employee
{
// These fields come from the “Employee” table
public int EmployeeId { get; set; }
public string Code { get; set; }
public string Name { get; set; }
// These fields come from the “EmployeeDetails” table
public string PhoneNumber { get; set; }
public string EmailAddress { get; set; }
}
public partial class Model : DbContext
{
public Model() : base("name=EntityModel")
{
Database.Log = Console.WriteLine;
}
public virtual DbSet<Employee> Employees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>()
.Map(map =>
{
map.Properties(p => new
{
p.EmployeeId,
p.Name,
p.Code
});
map.ToTable("Employee");
})
// Map to the Users table
.Map(map =>
{
map.Properties(p => new
{
p.PhoneNumber,
p.EmailAddress
});
map.ToTable("EmployeeDetails");
});
}
}
All credit for the above code goes to linked post
Upvotes: 6