The .NET Entity Framework has become a great ORM tool. I especially like it from a Code First perspective. But one issue I have had with it is creating a single data context that represents tables from different databases. It does not handle this situation well.
Unfortunately, many jobs you get, will have this scenario. I recently discovered an incredibly easy solution. Database VIEWS.
Now I have only tried this with a single database server (it might work with a link server) with mutliple databases. But if you create a View in the database you are pointing your EF data context to, that respresents a table in a different database, EF will treat it as if it is a local table. Its simple and beautiful.
//my data context
public class MyDbContext : DbContextBase
{
...
//primary db table
public DbSet<Entities.User> Users { get; set; }
//secondary db table
public DbSet<Entities.UserLoginToken> UserLoginTokens { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//User
modelBuilder.Entity<Entities.User>().ToTable("Users");
//UserLoginToken - pointing to a VIEW
modelBuilder.Entity<Entities.UserLoginToken>().ToTable("v_UserLoginTokens");
}
}
//create view
CREATE VIEW [dbo].[v_UserLoginTokens]
AS
SELECT * FROM MyOtherDB.dbo.UserLoginTokens