为什么Entity Framework不能进行跨数据库查询

为什么Entity Framework不能进行跨数据库查询,第1张

在Entity Framework中,我们可以通过ToTable("表名")指定表名进行映射,Entity Framework会根据指定的表名构建SQL语句,如果在这里加上数据库名和Schema名(也就是ToTable("数据库.dbo.表名")),是不是可以实现跨数据库查询呢?

于是,我们根据这个思路进行了试验,结果发现了Entity Framework不能进行跨数据库查询的秘密:Entity Framework会对ToTable()中指定的表名进行处理,加上中括号,如果没有指定Schema名,会在表名前加上[dbo],比如:ToTable("表名"),SQL语句中的表名是[dbo].[表名]。而在加“中括号”时的不正确有处理,成为了罪魁祸首。

我们试图组装一些特殊字符串骗过Entity Framework,都没成功。目前我们在用Reflector在Entity Framework的代码中寻找凶手,只有找到了凶手,知道了作案手段,才能知道是否有可能解决这个问题。

下面用代码爆一下料:

BlogDbContext的代码:

public class BlogDbContext : DbContext

{

public DbSet<PostText>PostTexts { getset}

protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

modelBuilder.Entity<PostText>().ToTable("blog_PostBody")

}

}

使用EntityManager进行开发首先要导入两个jar包:hibernate-entitymanager.jar与jboss-archive-browsing.jar。然后配置好persistence.xml,把它放到META-INF包下,META-INF在src根目录下面。需要注意的是:persistence.xml里面一般要进行方言的设置,如果是Oracle数据库,就用如下语句: property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" 查询指定的记录就使用EntityManager的find()方法就可以。如果要查询全部,还需要使用Query对象,注意:这里的Query是javax.persistence.Query,而不是org.hibernate.Query。下面来看代码:importjava.util.Listimportjavax.persistence.EntityManagerimport javax.persistence.EntityManagerFactoryimport javax.persistence.EntityTransactionimport javax.persistence.Persistenceimport javax.persistence.Queryimportdemo.annotations.entity.Weaponpublic class EntityManagerDemo { public static void main(String[] args){ EntityManagerFactory emf=Persistence.createEntityManagerFacto ry("em_demo")EntityManager em=emf.createEntityManager()EntityTransaction etx=em.getTransaction()etx.begin()Queryquery=em.createQuery("from Weapon")//类似于Hibernate,使用HQL语句,注意大小写Listlist=query.getResultList()//调用Query的获得结果集的方法for(Weaponw:list){


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10659912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存