加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 可以使用SQL Server DB在同一个框中进行跨数据库

发布时间:2020-12-12 16:32:11 所属栏目:MsSql教程 来源:网络整理
导读:我知道实体框架在发布到 stackoverflow的同一个服务器上进行跨数据库查询有很多问题.大多数情况下,答案似乎是“不”,而这个链接是从 way back in 2008 is referenced.然而,实体框架一直在变化,与CTP5出来,我想知道答案是否仍然是一样的 – 你不能这样做,或者
我知道实体框架在发布到 stackoverflow的同一个服务器上进行跨数据库查询有很多问题.大多数情况下,答案似乎是“不”,而这个链接是从 way back in 2008 is referenced.然而,实体框架一直在变化,与CTP5出来,我想知道答案是否仍然是一样的 – 你不能这样做,或者你可以这样做,如果你手动编辑edmx文件,或者你必须使用视图.单独的这个功能是我仍然绑定到Linq到SQL的原因,因为我们在同一台服务器上有多个SQL Server 2008数据库,需要在它们之间进行查询.使用数百个select *视图来污染我们的数据库不是一个选项,并且通过代码优先开发,我没有可编辑的edmx文件.我正在玩酒吧数据库,看看我能不能去某个地方,但我被困住了.有什么建议么?
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,上下文有一个连接字符串,连接字符串到数据库.

这里有两种方法:

>对每个数据库使用两个不同的上下文,这将意味着将数据提供给客户端并将其合并到客户端.
>在数据库中使用链接表,通过视图拉取数据,以便EF将其视为来自单个数据库.

在你的代码中,你使用的是2个dbcontexts

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读