于是,我们根据这个思路进行了试验,结果发现了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){欢迎分享,转载请注明来源:内存溢出
评论列表(0条)