I am working on an app that will use the same database schema across multiple databases. For this reason, I’ve created a database called MyTemplate. When a new user is created, they will have their own instance of the database. So, a database called something like MyTemplate_[UserName] will be created. When a user logs in, I need to point their queries to their database. For this reason, I know that I need to set the connection string at runtime. My problem is, I also want to use the Entity Framework.
Currently, I created a new .edmx using MyTemplate as the source. I thought I would be able to update the code and set the connection string there. Unfortunately, I can’t figure out how to set it. The constructor to TemplateEntities does not have an overload that allows me to pass in a connection string. I noticed that TemplateEntities derived from DbContext, I don’t think this would be the problem.
string connectionString = GetUsersConnectionString();
using (TemplateEntities entities = new TemplateEntities())
{
TemplateEntity entity = new TemplateEntity();
// Save to the database
entities.TemplateEntity.Add(entity);
entities.SaveChanges();
}
Am I creating the .edmx incorrectly? Or am I missing something entirely? Everything I Google shows an overload that should allow a connection string passed in. However, I don’t have that overload available.
The generated
TemplateEntitiesclass is marked aspartial.All you have to do is add another file with another part of the partial class definition that exposes the constructor you want to use:
Then pass your connection string in to this constructor.
You want to put this code in a different file so it doesn’t get over-written when you update your edmx model.