EF 跨库查询

原因:最近公司项目,遇到一个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

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


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

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

EF 跨库查询_第1张图片



这是我们的数据库

EF 跨库查询_第2张图片


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 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().ToTable("dbo.UserInfoMain");
        }

        public DbSet Destinations { get; set; }
        public DbSet Lodgings { get; set; }
//这个其实就是我们的跨库查询对象UserInfoMain
        public DbSet UserInfoMain { get; set; }
    } 
}

然后增加 webconfig字符串


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

public class TestEFController : Controller
    {
        //
        // GET: /TestEF/
        BreakAwayContext db = new BreakAwayContext();
        public ActionResult Index()
        {
//查询本库信息
            var q = db.Destinations.ToList();
//查询跨库信息
var v = db.UserInfoMain.ToList(); return View(); } }

 
  
结果:

EF 跨库查询_第3张图片



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

你可能感兴趣的:(mvc,ORM)