从 EF 4.1 中的 WCF Web 服务调用 sql 视图

发布于 2024-12-14 05:53:11 字数 388 浏览 0 评论 0原文

我致力于使用 EF4.1、WCF Web 服务和 Sql azure 编写优先技术。为了提高性能,我想创建视图来在服务器端获取数据。但根据这个 我们不能先将 sql View 与 EF 代码一起使用。 因为数据库和模型已经定义好了。它有数据。为唯一创建的视图重新创建和转储数据是一个耗时的过程。

所以我只是在 sql server 上显式创建了视图。 现在我想从我的 wfc Web 服务调用该视图。现在我想将该视图作为 WCF 中的数据集进行访问。需要指导方针。和正确的方法

I working to code first technique with EF4.1, WCF webservice, and Sql azure. To improve the performance i wanted to create the View to fetch data at server side. but according to this
we can not use sql View with EF code first.
Because the database and models are defined. it has the data. to re create and dump data for the only creating view is time taking process.

so i just created the View explicitly at sql server.
now I want to call that view from my wfc web service. Now i want to access that view as dataset in WCF. need guidlines. and right approach

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

当梦初醒 2024-12-21 05:53:11

您能否在 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 = "[email protected]" });
  }     
}

...

using (TestContext context = new TestContext())
{
  context.UserView.ToList(); //contains all the users
}

Could you define a table in codefirst with the same columns, then create a custom initializer that drops the table from the database and creates it again as a view?

Then you should be able to query it just like normal.

Edit Update to show working example

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 = "[email protected]" });
  }     
}

...

using (TestContext context = new TestContext())
{
  context.UserView.ToList(); //contains all the users
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文