2011-10-19 77 views
0

說我有兩個DbContext,一個包含品種,另一個包含狗。在兩個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中得到兩個表格,一個用於狗,一個用於品種。我希望EF能夠發現,自從在MainUnitOfWork中聲明後,該品種確實屬於MainDb。那麼,我如何繼續彎曲EF來做我想做的事?

回答

0

即使EF會找到一種方法來執行此操作,也無法在關係數據庫中表示該方法,因爲無法爲另一個數據庫中的表定義外鍵。至少不在主流的關係數據庫服務器中。

狗表需要一個外鍵來代表多對一的關係。

0

EF並不神奇。它不建立NextUnitOfWorkMainUnitOfWork類之間的任何關係。無論如何你都不能混用它們。