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(同义词) 关键字

    [sql] view plain copy
     
    1. CREATE SYNONYM UserInfoMain  
    2.  FOR TestUserData.dbo.UserInfo  



    先创建我们的实体模型

    [csharp] view plain copy
     
    1. namespace TestMVC.Models  
    2. {  
    3.     public class Destination  
    4.     {  
    5.         public int DestinationId { get; set; }  
    6.         public string Name { get; set; }  
    7.         public string Country { get; set; }  
    8.         public string Description { get; set; }  
    9.         public byte[] Photo { get; set; }  
    10.         public List<Lodging> Lodgings { get; set; }  
    11.     }  
    12.   
    13.   
    14.     public class Lodging  
    15.     {  
    16.         public int LodgingId { get; set; }  
    17.         public string Name { get; set; }  
    18.         public string Owner { get; set; }  
    19.         public bool IsResort { get; set; }  
    20.         public Destination Destination { get; set; }  
    21.     }  
    22.   
    23.   
    24.     public class UserInfoMain  
    25.     {  
    26.         public int id { get; set; }  
    27.         public string name { get; set; }  
    28.         public DateTime? createTime { get; set; }  
    29.     }  
    30. }  

    接着创建DbContext对象

    [csharp] view plain copy
     
    1. namespace TestMVC.Models  
    2. {  
    3.     public class BreakAwayContext : DbContext  
    4.     {  
    5.         protected override void OnModelCreating(DbModelBuilder modelBuilder)  
    6.         {  
    7.             modelBuilder.Entity<UserInfoMain>().ToTable("dbo.UserInfoMain");  
    8.         }  
    9.   
    10.         public DbSet<Destination> Destinations { get; set; }  
    11.         public DbSet<Lodging> Lodgings { get; set; }  
    [csharp] view plain copy
     
    1. //这个其实就是我们的跨库查询对象UserInfoMain  
    2.         public DbSet<UserInfoMain> UserInfoMain { get; set; }  
    3.     }   
    4. }  


    然后增加 webconfig字符串

    [html] view plain copy
     
    1. <add name="BreakAwayContext"  
    2.   
    3.         connectionString="server=.;database=MvcBlog;integrated security=true;"  
    4.   
    5.         providerName="System.Data.SqlClient"/>  


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

    [csharp] view plain copy
     
    1. public class TestEFController : Controller  
    2.     {  
    3.         //  
    4.         // GET: /TestEF/  
    5.         BreakAwayContext db = new BreakAwayContext();  
    6.         public ActionResult Index()  
    7.         {  
    8. //查询本库信息  
    9.             var q = db.Destinations.ToList();  
    [csharp] view plain copy
     
    1. <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”开头的表

  • 相关阅读:
    UML类图和用例图
    设计模式基本原则
    c# 协变和逆变
    git本地忽略
    计算器科学概论-数据操控
    计算机科学概论-数据存储
    docker部署gitlab-ce
    sqlserver2008R2 本地不能用localhost连接
    Redis常用命令
    C# 值类型和引用类型的区别
  • 原文地址:https://www.cnblogs.com/sjqq/p/8407049.html
Copyright © 2011-2022 走看看