两个DbContexts之间共享

时间:2011-10-19 17:31:25

标签: entity-framework-4 ef-code-first

假设我有两个DbContext,一个包含品种,另一个包含狗。

public class Dog {
    public Breed Breed { get; set; }
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class Breed {
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class MainUnitOfWork : DbContext
{
    public MainUnitOfWork(): base("MainDb") { }
    public IDbSet<Breed> Breeds { get; set; }
}

public class NextUnitOfWork : DbContext
{
    public NextUnitOfWork() : base("NextDb") { }
    public IDbSet<Dog> Dogs { get; set; }
}

现在我尝试插入一只新狗。

var next = new NextUnitOfWork();

var dog = new Dog
    { Id = Guid.NewGuid(), Name = "Fido", 
      Breed = new Breed { Id = Guid.NewGuid(), Name = "Rotweiler" } };

next.Dogs.Add(dog);
next.SaveChanges();

现在我在NextDb中得到两个表,一个用于Dogs,一个用于Breeds。我希望EF能够确定Breed真的属于MainDb,因为它已在MainUnitOfWork中声明。好吧,我如何继续弯曲EF来做我想做的事?

2 个答案:

答案 0 :(得分:0)

EF不是魔术。它没有在NextUnitOfWorkMainUnitOfWork类之间建立任何关系。而且无论如何你都不能把它们混在一起。

答案 1 :(得分:0)

即使EF找到了解决方法,也无法在关系数据库中表示,因为无法为另一个数据库中的表定义外键。至少不在主流的关系数据库服务器中。

Dog table需要Breed的外键代表多对一关系。