C# EF 7(核心):另一个数据库中的依赖对象
我是EF7新手,使用1.0.0-rc1-final 使用数据库优先设计(数据库已经存在,因此必须使用它) 我有2个实体-父实体在一个数据库中,从属子实体在同一服务器实例上的另一个数据库中 我有两个数据库上下文,每个数据库分别有一个,并相应地注册了实体,但是当急切地加载父实体(使用include)时,它仍然尝试在同一数据库中定位依赖实体 我做错什么了吗 在以下代码中,已删除与问题无关的所有其他对象 家长:C# EF 7(核心):另一个数据库中的依赖对象,c#,.net,entity-framework-core,C#,.net,Entity Framework Core,我是EF7新手,使用1.0.0-rc1-final 使用数据库优先设计(数据库已经存在,因此必须使用它) 我有2个实体-父实体在一个数据库中,从属子实体在同一服务器实例上的另一个数据库中 我有两个数据库上下文,每个数据库分别有一个,并相应地注册了实体,但是当急切地加载父实体(使用include)时,它仍然尝试在同一数据库中定位依赖实体 我做错什么了吗 在以下代码中,已删除与问题无关的所有其他对象 家长: [Table("tblEventsDates")] public class Session
[Table("tblEventsDates")]
public class Session
{
[Column("EventDateID")]
public int SessionId { get; set; }
[Column("EventDateName")]
public string Name { get; set; }
[Column("EventDate")]
public DateTime SessionDate { get; set; }
[Column("EventDateTime")]
public DateTime SessionTime { get; set; }
[Column("EventDateMinutes")]
public decimal? SessionDurationInMinutes { get; set; }
[Column("EventDateArrival")]
public DateTime? ArrivalTime { get; set; }
[Column("EventCapacity")]
public int SessionCapacity { get; set; }
//navigation properties
[JsonIgnore]
public int EventId { get; set; }
[JsonIgnore]
public Event Event { get; set; }
public HardTicketRange HardTicketRange {get;set;}
}
从属实体:
[Table("tblhardTicketRanges")]
public class HardTicketRange {
public int HardTicketRangeId { get; set; }
public int Start { get; set; }
[Column("Finish")]
public int End { get; set; }
public string Description { get; set; }
//navigation properties`enter code here`
public int SessionId { get; set; }
public Session Session { get; set; }
}
第二个DbContext:
public class TicketingDataDbContext : DbContext {
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<HardTicketRange>()
.HasOne(e => e.Session)
.WithOne(e => e.HardTicketRange);
modelBuilder.Entity<HardTicketRange>(entity => {
entity.HasKey(e => e.HardTicketRangeId);
});
}
public virtual DbSet<HardTicketRange> HardTicketRanges { get; set; }
}
由EF 7生成的SQL-这是不正确的,因为这两个表存在于不同的数据库中
SELECT [e].[EventDateID], [e].[EventDateArrival], [e].[EventId], [e].
[EventDateName], [e].[EventCapacity], [e].[EventDate], [e].[EventDateMinutes], [e].[EventDateTime], [t].[HardTicketRangeId], [t].[Description], [t].[Finish], [t].[SessionId], [t].[Start]
FROM [tblEventsDates] AS [e]
LEFT JOIN [tblhardTicketRanges] AS [t] ON [t].[SessionId] = [e].[EventDateID]
WHERE [e].[EventId] = @__eventId_0
ORDER BY [e].[EventDate], [e].[EventDateTime] DESC
我不确定任何版本的实体框架是否支持跨数据库关系。你需要分别使用这两个上下文并自己合并结果。是的,我想你是对的,如果我真的需要这样的东西,我可能必须基于查询这两个源的视图创建一个视图和一个数据模型
var sessions = from s in _cxt.Sessions.Include(e=>e.HardTicketRange)
where s.EventId == eventId
orderby s.SessionDate, s.SessionTime descending
select s;
SELECT [e].[EventDateID], [e].[EventDateArrival], [e].[EventId], [e].
[EventDateName], [e].[EventCapacity], [e].[EventDate], [e].[EventDateMinutes], [e].[EventDateTime], [t].[HardTicketRangeId], [t].[Description], [t].[Finish], [t].[SessionId], [t].[Start]
FROM [tblEventsDates] AS [e]
LEFT JOIN [tblhardTicketRanges] AS [t] ON [t].[SessionId] = [e].[EventDateID]
WHERE [e].[EventId] = @__eventId_0
ORDER BY [e].[EventDate], [e].[EventDateTime] DESC