2010-10-14 53 views
1

我的問題是我們可以在實體框架4中將一個上下文擴展到另一個上下文。以下是問題背景。實體框架4,將一個edmx文件的上下文擴展到另一個edmx文件的上下文

我正在使用EF4開發Web應用程序。我的Web應用程序有3個項目。

  • 一個項目用於存儲候選CV信息。
  • 另一個項目是存儲客戶信息。
  • 最終項目稱爲CORE。這個CORE包含一個應該由CV和CRM擴展的edmx文件。

作爲示例,電子郵件地址表可以由客戶(CRM)和簡歷共享。要與另一個表共享一個表,我們應該能夠使用其他上下文(客戶上下文)擴展一個上下文(CV上下文)。有人使用實體框架的經驗與我分享你的經驗,以找出這是否可能。

我們有三個類庫3個EDMX文件:與(姓名,電子郵件)

  • CV類庫與簡歷相關的人core.edmx - 基本信息

    1. 人類庫(核心)的.edmx至極具有CV相關數據(的experiance,技能)
    2. 客戶關係管理系統(CRM),其中有客戶數據(銷售數據......)

    然後我們想用核心類庫EDMX文件(核心。 edmx)與cv.edmx(基本上cv表應該能夠使用核心表中的表)。我們希望使用CRM.edmx的core.edmx連續第3項目

  • +0

    你是說你有2個獨立的EDMX文件,你想「分享」他們嗎? 「兩個模塊」是什麼意思?兩個類庫?請重新提出你的問題。 (也提到你使用的是哪個版本的EF) – RPM1984 2010-10-14 03:39:10

    +0

    是的,我在3個項目中有3個edmx文件。其中一個edmx文件是Core Core,另外兩個是CV和CRM,我想繼承Core的CV – KItis 2010-10-14 04:28:25

    +0

    @Kltis - 我還是不明白。你想達到什麼目的?我們需要比「擴展背景」更多的信息。上下文適用於一個EDMX。 – RPM1984 2010-10-14 04:31:52

    回答

    4

    那麼首先 同樣的方式,你的EDMX的不應該(實際上也不可能)搭腔

    它通常是一個1-1上下文 - > EDMX - >數據庫。

    更好的解決方案是將您的模型封裝在存儲庫後面。

    每個一個倉庫會給你一個PersonRepository,CvRepository,CustomerRepository。

    每個DLL都可以公開單個存儲庫。

    然後,您需要一個「服務層」,它可以與存儲庫一起工作。類似於「工作單位」。

    例如,您可以創建一個CvPersonService,它可以處理與兩個人(核)和CV庫交互:

    using PersonRepository; 
    using CvRepository; 
    
    public class CvPersonService 
    { 
        public CvPerson GetHydratedCvPersonFromTwoRepositories() 
        { 
         var person = personRepository.Find(1); // get a person 
         var cv = cvRepository.Find(1); // get a cv 
    
         return new CvPerson { ThePerson = person, TheCv = cv }; 
        } 
    } 
    

    重要的是要注意的是,EF不作任何數據庫連接和假設上下文。與特定上下文關聯的數據庫可能位於本地計算機,開發服務器或雲中。 EF不知道(或關心)數據庫在哪裏。您的配置中的SQLProvider特定於此。英孚必須假設它可能在任何地方。

    因此,您不能真正將「查詢」從一個上下文「加入」到另一個上下文。這將如何工作?也許在「老派」中,你可以使用鏈接服務器,但對於像這樣的ORM是不可行的。

    這樣說吧:

    1. 創建託管在您的本地PC(DB1)
    2. 建立在互聯網上託管的數據庫上的數據庫。 (DB2)
    3. 編寫查詢以連接兩個表的結果,一個來自DB1,另一個來自DB2。

    你不能這樣做嗎? Entity Framework也不是。 :)

    即使所有三個EDMX /上下文使用相同的數據庫,它也無所謂。

    以上將是一個更好的解決方案 - 以一種可以通過流暢存儲庫優雅地公開模型的方式重新構建它。

    HTH

    +0

    RPM1984,非常感謝你的答案,它真的幫了我。你可以給我你的gtalk電子郵件地址聯繫如果你不介意 – KItis 2010-10-14 12:18:14

    +0

    @Kltis - 而不是如果這就好了。如果您需要更多幫助,請發佈Stack Overflow,這裏提供了大量幫助。 – RPM1984 2010-10-14 21:04:16