Я знаю, что было много вопросов о Entity Framework, выполняющих кросс-запросы к базе данных на том же сервере, что и в qaru.site/info/396200/.... В основном ответ кажется "нет", и эта ссылка из возвращается в 2008 году. Тем не менее, Entity Framework меняет все время и на CTP5, мне интересно, остается ли тот же ответ, что вы не можете это сделать, или можете сделать это, если вручную отредактируете файл edmx или у вас есть для использования представлений. Эта особенность сама по себе является причиной того, что я все еще привязан к Linq-to-SQL, так как у нас есть несколько баз данных SQL Server 2008 на одном сервере и вам нужно запросить их. Загрязнение наших баз данных сотнями представлений select *
не является вариантом, и с кодовой разработкой у меня нет файла edmx для редактирования. Я играл с базой пабов, чтобы посмотреть, могу ли я где-нибудь попасть, но я застрял. Любые предложения?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
namespace DbSchema {
public class Employee {
[Key]
public string ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public short JobID { get; set; }
public Job Job { get; set; }
}
public class Job {
[Key]
public short ID { get; set; }
public string Description { get; set; }
}
public class PubsRepository : DbContext {
public DbSet<Employee> Employee { get; set; }
public DbSet<Job> Job { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
// employee
var eeMap = modelBuilder.Entity<Employee>();
eeMap.ToTable("employee", "dbo"); // <-- how do I reference another database?
eeMap.Property(e => e.ID).HasColumnName("emp_id");
eeMap.Property(e => e.FirstName).HasColumnName("fname");
eeMap.Property(e => e.LastName).HasColumnName("lname");
eeMap.Property(e => e.JobID).HasColumnName("job_id");
// job
var jobMap = modelBuilder.Entity<Job>();
jobMap.Property(j => j.ID).HasColumnName("job_id");
jobMap.Property(j => j.Description).HasColumnName("job_desc");
}
public List<Employee> GetManagers() {
var qry = this.Employee.Where(x => x.Job.Description.Contains("manager"));
Debug.WriteLine(qry.ToString());
return qry.ToList(); // <-- error here when referencing another database!
}
}
}