实体框架导航属性到不同db中的表

时间:2011-09-23 06:10:37

标签: entity-framework

我在不同的数据库中有2个表

db1..Towns
    id
    Nazv

db2..MathchedTown
    id
    t_id
    d_name

他们由TowTowns.id = MathchedTown.t_id加入 这个EF课程:

[Table("Towns")]
    public class Town
    {
        [Key]
        public int id { get; set; }
        public string Nazv { get; set; }
    }
[Table("MathchedTown")]
    public class mTown
    {
        [Key]
        public int id { get; set; }

        [Required]
        public string t_id{ get; set; } 

        [Required]
        public string d_name{ get; set; }

        [ForeignKey("t_id")]
        public virtual Town town { get; set; }

    }

当我尝试获取item.town.nazv时出现错误: 无效的对象名称'dbo.Towns'。 如果我将[Table(“Towns”)]更改为[Table(“db1.dbo.Towns”)],则会出现几乎相同的错误:无效的对象名称'dbo.db1.dbo.Towns'。

所有错误都是SqlExceptions

我怎么说话EF4不会替代“dbo”。前缀?

2 个答案:

答案 0 :(得分:1)

实体框架不支持单个上下文中的多个数据库。但它支持单个数据库中的多个模式。如果您未指定架构,则会假定dbo

[Table("Towns", "MySchema")]
public class Town

您可以按上述方式指定架构。

如果要在其他数据库中使用表,可以在数据库中创建该表的视图。但它将是只读的。

答案 1 :(得分:0)

不幸的是,EF4不支持其他数据库中的导航属性。 你有两个选择。

一,创建存储过程并将其作为函数导入到edm中。并且返回结果的genetate复杂类型。

二,为每个数据库创建两个实体模型。然后对数据库运行查询,然后使用第一个查询结果中的where子句将另一个查询运行到另一个数据库。