gpt4 book ai didi

sql-server - 代码优先 Entity Framework 可以在同一个机器上使用 SQL Server DB 进行跨数据库查询吗?

转载 作者:行者123 更新时间:2023-12-02 07:45:37 25 4
gpt4 key购买 nike

我知道有很多关于 Entity Framework 在同一服务器上执行跨数据库查询的问题发布到 stackoverflow 。大多数情况下,答案似乎是“否”,此链接来自 way back in 2008 is referenced 。然而, Entity Framework 一直在变化,随着 CTP5 的出现,我想知道答案是否仍然相同 - 你不能这样做,或者如果你手动编辑 edmx 文件,或者你有使用 View 。仅此功能就是我仍然依赖 Linq-to-SQL 的原因,因为我们在同一服务器上有多个 SQL Server 2008 数据库,并且需要跨它们进行查询。用数百个 select * View 污染我们的数据库是不可行的,并且通过代码优先开发,我没有要编辑的 edmx 文件。我正在研究 pubs 数据库,看看是否可以到达某个地方,但我被困住了。有什么建议吗?

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;

namespace DbSchema {
public class Employee {
[Key]
public string ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public short JobID { get; set; }
public Job Job { get; set; }
}

public class Job {
[Key]
public short ID { get; set; }
public string Description { get; set; }
}

public class PubsRepository : DbContext {
public DbSet<Employee> Employee { get; set; }
public DbSet<Job> Job { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder) {
// employee
var eeMap = modelBuilder.Entity<Employee>();
eeMap.ToTable("employee", "dbo"); // <-- how do I reference another database?
eeMap.Property(e => e.ID).HasColumnName("emp_id");
eeMap.Property(e => e.FirstName).HasColumnName("fname");
eeMap.Property(e => e.LastName).HasColumnName("lname");
eeMap.Property(e => e.JobID).HasColumnName("job_id");

// job
var jobMap = modelBuilder.Entity<Job>();
jobMap.Property(j => j.ID).HasColumnName("job_id");
jobMap.Property(j => j.Description).HasColumnName("job_desc");
}

public List<Employee> GetManagers() {
var qry = this.Employee.Where(x => x.Job.Description.Contains("manager"));
Debug.WriteLine(qry.ToString());
return qry.ToList(); // <-- error here when referencing another database!
}
}
}

最佳答案

我认为答案仍然是否定的,但有一些方法可以解决这个问题。

之所以不是,是因为EF使用了DBContext,而上下文有一个连接字符串,一个连接字符串就到了数据库。

这里有两种解决方法:

  • 对每个数据库使用 2 个不同的上下文,这意味着将数据引入客户端并在客户端上合并。
  • 在数据库上使用链接表,通过 View 提取数据,以便 EF 将其视为来自单个数据库。

在您的代码中,您似乎正在使用 2 个 dbcontext

关于sql-server - 代码优先 Entity Framework 可以在同一个机器上使用 SQL Server DB 进行跨数据库查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com