有没有办法在Entity Framework中实现跨数据库查询?让我们假设我有两个实体用户和帖子,用户实体在database1中,Post在数据库2中,这意味着这些实体在不同的数据库中.我应该如何获得实体框架中的用户帖子?
我知道我已经在某个地方见过这个解决方案,但我现在似乎无法找到它.我正在尝试查询一个MongoDB数据库,同时连接到另一个.在运行查询之前,无需显式连接到其他数据库,这是可能的.有谁知道这样做的正确语法?
我有一个网站,使用一个名为"site1"的数据库.我打算将另一个站点放在同一台服务器上,该站点也将使用"site1"中的一些表.
因此,我应该使用三个不同的数据库,如"site1"(对于第一个站点特定数据),"site2"(对于第二个站点特定数据)和"general"(对于常见表).其中将存在数据库general和site1和site2之间的连接语句.或者我应该将所有表放在一个数据库中?
哪种做法最好?每种情况下表现如何不同?我正在使用MySQL.那么这种情况尤其适用于MySQL呢?
提前致谢...
我想知道EF4是否支持跨数据库关系?例如:
DB1
Author
Id
Name
Run Code Online (Sandbox Code Playgroud)
DB2
Posts
Id
Content
db1.Author.Id
Run Code Online (Sandbox Code Playgroud)
理想情况下,我需要做什么才能在我的ef4模型中获得这种关系?
你们有什么想法吗?
谢谢
我在两个不同的数据库(具有相同的上下文)之间导入数据.
所以我有两个不同的背景.目标是将上下文A的一些数据导入上下文B.
从不直接编辑上下文B中的数据,它们仅从上下文A导入.在上下文B中,我将复制从中导入它的ID.
现在我正在尝试检索列表中所有不在上下文B中或具有更新版本的数据.
我在两个表中有一个ModifiedAt"字段,让我知道该字段是否已被修改.
这是我目前的代码:
//Here I get all my current data in the context B with their modification time
Dictionary<int,DateTime> currentItems = contextB.Dossiers.ToDictionary(d=>d.MatchingReferenceId, d=>d.ModifiedAt);
//And here the pain starts:
contextA.Dossiers.Where(da=> !currentItems.Keys.Contains(da.Id) || currentItems.FirstOrDefault(db=>db.Key == da.Id).Value <da.ModifiedAt)//And I'm looping on it with a foreach.
Run Code Online (Sandbox Code Playgroud)
第一部分(我检查上下文B是否包含元素)工作,第二部分,我得到了这个例外:
Unable to process the type 'System.Collections.Generic.KeyValuePair`2[]', because it has no known mapping to the value layer.
Run Code Online (Sandbox Code Playgroud)
但我不能做更简单的Id和修改时间之间的这个链接(在开始时,我从其他上下文有一个POCO类,我也试过匿名类型,相同的结果)
我错过了什么?
编辑1
我也用完全相同的结果尝试了这个:contextA.Dossiers.Where(da =>!currentItems.Keys.Contains(da.Id)|| currentItems.Any(db => db.Key == da.Id && db.值
编辑2
我试过lambda,但在这里它不喜欢同时使用两个上下文:
var myList = (from …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个跨数据库外键.当我在同一个数据库上运行以下代码时
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int_id` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `int_id` (`int_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ext_id` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `ext_id` (`ext_id`),
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`ext_id`) REFERENCES `t1` (`int_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
但是,当在一个数据库(d1)上创建t1然后在第二个数据库(d2)上运行以下代码时,我收到一般错误:#1005 - 无法创建表'userdata.t2'(错误号:150)
CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ext_id` varchar(128) …Run Code Online (Sandbox Code Playgroud) 我需要将数据从一个表复制到另一个表.这两个表具有几乎相同的结构,但是在不同的数据库中.
我试过了
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
Run Code Online (Sandbox Code Playgroud)
我尝试这个,我得到错误交叉数据库...没有实现
是否可以在 JPA 中进行跨数据库表连接?
我users在一个数据库中有一个表,它有organizations一个单独数据库中表的外键。两个数据库都在同一台物理机器上。现在 MySQL 允许我编写跨越多个数据库的查询,但我不确定如何使用 JPA 来做到这一点。
在@Entity对Java POJO的注解,也没有办法,以纪念跨DB关系不采取数据库的名称。
这种情况有解决方法吗?也许使用本机查询来加载加入的实体?
在Postgres中,您可以使用链接到其他数据库dblink,但语法非常详细.例如,您可以这样做:
SELECT *
FROM dblink (
'dbname=name port=1234 host=host user=user password=password',
'select * from table'
) AS users([insert each column name and its type here]);
Run Code Online (Sandbox Code Playgroud)
有没有办法更快地做到这一点?也许预先定义连接?
我注意到Postgres有一个create foreign table连接MySQL数据库的新功能.它的语法比dblink.我能用吗?
我有两个 SQLite 数据库,其中包含需要使用 SQLalchemy 加入的表。由于某些原因,我无法将所有表合并到一个 SQLite 数据库中。我正在使用 SQLalchemy ORM。我无法在网上找到任何符合我的具体情况的解决方案。
我的问题原则上与SQLAlchemy error query join across database 相同,但原始海报的问题是使用与我的用例不匹配的不同解决方案解决的。
我对 Stackoverflow 的聪明人的问题:
我想模拟以下 SQL 查询:
SELECT DISTINCT g.gene_symbol, o.orthofinder_id FROM eukarya.genes AS g JOIN annotations.orthofinder AS o ON g.gene_id=o.gene_id;
Run Code Online (Sandbox Code Playgroud)
此查询使用附加了两个数据库文件的 SQliteStudio 可以正常工作。
我目前用来描述元数据的代码:
eukarya_engine = create_engine('sqlite:///eukarya_db.sqlite3')
annotations_engine = create_engine('sqlite:///eukarya_annotations_db.sqlite3')
meta = MetaData() # This allows me to define cross database foreign keys
Eukarya = declarative_base(bind=eukarya_engine, metadata=meta)
Annotations = declarative_base(bind=annotations_engine, metadata=meta)
# I did the above in the hopes that by binding …Run Code Online (Sandbox Code Playgroud) cross-database ×10
mysql ×3
database ×2
postgresql ×2
sql ×2
c# ×1
copy ×1
datacontext ×1
dblink ×1
foreign-keys ×1
join ×1
jpa ×1
jpa-2.0 ×1
linq ×1
mongodb ×1
python ×1
sql-server ×1
sqlalchemy ×1
sqlite ×1
syntax ×1