Не могли бы вы определить таблицу в codefirst с теми же столбцами, а затем создать собственный инициализатор, который удаляет таблицу из базы данных и снова создает ее как представление?
Тогда вы сможете запросить его, как обычно.
Изменить обновление, чтобы показать рабочий пример
public class User
{
public int Id { get; set; }
public string Email { get; set; }
}
public class UserView
{
public int Id { get; set; }
public string Email {get; set;}
}
public class TestContext : DbContext
{
static TestContext()
{
Database.SetInitializer<TestContext>(new DatabaseInitializer());
}
public DbSet<User> Users { get; set; }
public DbSet<UserView> UserView { get; set; }
}
class DatabaseInitializer : DropCreateDatabaseIfModelChanges<TestContext>
{
protected override void Seed(TestContext context)
{
base.InitializeDatabase(context);
context.Database.ExecuteSqlCommand("drop table UserViews");
context.Database.ExecuteSqlCommand(@"CREATE VIEW [dbo].[UserViews] AS SELECT *
from [dbo].[Users]
GO");
context.Users.Add(new User() { Email = "test@test.com" });
}
}
...
using (TestContext context = new TestContext())
{
context.UserView.ToList(); //contains all the users
}