zoukankan      html  css  js  c++  java
  • 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

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


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

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




    这是我们的数据库



    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”开头的表

  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779907.html
Copyright © 2011-2022 走看看