原因:最近公司项目,遇到一个ef跨库查询的问题。(只是跨库,并不是跨服务器哈)

主要我们的一些数据,譬如地址,城市需要查询公共资料库。

但是本身我的程序设计采用的是ef框架的。因此为这事花费了1天时间。也总算有些成效,后来采用codefirst解决了这个问题

下面我就来分享一下。

注意:当然,这里我需要说明一下,我在使用entityframework时,跨库是失败的。(可能表述的不好,应该说是数据库生成模型的方式,失败了。)

但是!我在使用 codefirst时,跨库是成功的!

一个只是由数据库生成模型,另一个是模型生成数据库。

(总结下来,由于数据库生成的模型,edmx文件中,增加了太多的映射信息,不太容易修改和扩展跨库的对象模型。。。。)

注明:这里参考了dudu的文章,还是很有用的,当然主要也是dudu的回复里killkill作出了很大贡献和启发。哈哈

地址:http://www.cnblogs.com/dudu/archive/2011/03/29/entity_framework_cross_database_query_fact.html

废话这么多,下面就上代码!

开始:首先看一下数据库设计:

这个就是我们需要的跨库查询表。

这是我们的数据库

sql运行如下脚本

你没有看错,我们灵活的运用了 SYNONYM(同义词) 关键字

CREATE SYNONYM UserInfoMain
FOR TestUserData.dbo.UserInfo

先创建我们的实体模型

namespace TestMVC.Models
{
    public class Destination
    {
        public int DestinationId { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
        public string Description { get; set; }
        public byte[] Photo { get; set; }
        public List<Lodging> Lodgings { get; set; }
    }     public class Lodging
    {
        public int LodgingId { get; set; }
        public string Name { get; set; }
        public string Owner { get; set; }
        public bool IsResort { get; set; }
        public Destination Destination { get; set; }
    }     public class UserInfoMain
    {
        public int id { get; set; }
        public string name { get; set; }
        public DateTime? createTime { get; set; }
    }
}

接着创建DbContext对象

namespace TestMVC.Models
{
public class BreakAwayContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserInfoMain>().ToTable("dbo.UserInfoMain");
} public DbSet<Destination> Destinations { get; set; }
public DbSet<Lodging> Lodgings { get; set; }
//这个其实就是我们的跨库查询对象UserInfoMain
public DbSet<UserInfoMain> UserInfoMain { get; set; }
}
}

然后增加 webconfig字符串

<add name="BreakAwayContext"

        connectionString="server=.;database=MvcBlog;integrated security=true;"

        providerName="System.Data.SqlClient"/>

最后,我们创建一个试图看看能否捕捉数据

public class TestEFController : Controller
{
//
// GET: /TestEF/
BreakAwayContext db = new BreakAwayContext();
public ActionResult Index()
{
//查询本库信息
var q = db.Destinations.ToList();
<pre name="code" class="csharp">//查询<span style="font-family: Arial, Helvetica, sans-serif;">跨库信息</span>

var v = db.UserInfoMain.ToList(); return View(); } }


结果:

PS:如果遇见  什么 code first 迁移问题,请删除   Sql中
数据库-表-系统表,删除“_MigrationXXX”开头的表

最新文章

  1. python笔记(持续更新)
  2. 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
  3. Power BI for Office 365(六)Power Map简介
  4. xampp安装
  5. 生成证书时Distribution下面App Store and Ad Hoc 选项不能选择的原因及解决办法
  6. Backbone.js学习之Router
  7. zedboard搭建交叉编译环境
  8. linux常用命令[持续更新]
  9. ECSHOP 商品页详情页 添加同类随机商品
  10. 监听键盘 防止输入时覆盖掉textfiled
  11. 重新关联bat文件的打开方式为系统默认方式
  12. JS-鼠标滚轮事件 和 阻止默认行为
  13. python学习笔记——列表操作
  14. centos7下更改docker镜像和容器的默认路径
  15. 软件工程网络15团队作业1——团队组队&amp;展示
  16. [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]
  17. C# 请求接口返回中文乱码→???
  18. 一名前端Web架构师的成长之路(转载)
  19. python如何去掉字符串‘\xa0’
  20. pipenv安装.whl

热门文章

  1. ASP.NET Aries 入门开发教程9:业务表单的开发
  2. Android使用ndk-stack获取so奔溃堆栈
  3. jQuery 查找父元素
  4. Command(命令)-对象行为型模式
  5. Popline:帅气的浮动 HTML5 文本编辑器工具栏
  6. ASP代码审计 -4.命令执行漏洞总结
  7. Hardmard 变换
  8. Lucene学习笔记: 四,Lucene索引过程分析
  9. vim 删除临时文件
  10. uva 719 Glass Beads(后缀自动机)
  11. Canvas贝塞尔三级曲线
  12. android sdk 深入理解adb
  13. Xamarin Essentials应用教程文件系统FileSystem
  14. UVALive - 4223,hdu2962(简单dijkstra)
  15. unicode 编解码记录
  16. Swift学习笔记7--访问控制
  17. Centos7上卸载openJdk安装,安装自己的JDK1.8
  18. AngularJS使用angular-formly进行表单验证
  19. 我的第一个Raspberry PI装置
  20. SpringCloud初体验:五、Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud