簡體   English   中英

如何使用實體框架設置“數據庫優先”查找表

[英]How to setup a “database first” lookup table with entity framework

我是實體框架和C#的新手,而不是SQL。 我有帶有多個字段的表[Contact],該字段引用了名為[XRef_Codes]的查找表。 首先,我要在頁面加載時將asp.net網絡表單上的所有下拉列表綁定到篩選后的查找表。 其次,我希望能夠在聯系人實體模型中公開查找值(整數和文本值)(請參見下文)

這是[聯系人]表中的字段示例名字(vchar(50)姓(vchar(50)xPrefix(int)xSuffix(int)xReferral(int)xStatus(int)xGender(int)xMaritalStatus(int)xAgeGroup (int)

我有一個稱為[xRef_Codes]的自引用查找表,該表具有聯系表中所有帶有前綴“ x”的字段的選擇值(即xPrefix,xSuffix): [xRef_Codes] CodeID(int)CodeName(vchar50)OfCodeID(int )SortOrder(int)SetAsDefault(位)

[1]在我的asp.net表單中,我想從xRef_Codes表(其中OfCodeID = ## ORDER BY SetAsDefault,SortOrder)中填充已排序/篩選的下拉列表。 在頁面加載中,我會一次綁定所有下拉列表。

[2]我想將相關的XRef_Codes“ CodeName”值關聯為聯系人對象/實體的一部分。 所以我可以看到contact.prefix.CodeName =“ Mr。” 和contact.suffix.CodeName =“ Sr.” 和contact.gender.CodeName =“ Male”,等等。

最好的方法是什么? 是否可以幫助我理解是否需要關聯實體框架設計器中的所有這些字段?

我是新事物,所以我想我會分享自己旅途中的成果。 我的解決方案是利用global.asax文件和Session_Start()對象。

首先 ,我為下拉列表代碼創建了一個名為xRefCodesRepository的類。 在我的第一個例程中,我將值加載到會話變量中,如下所示:

 public void xref_LoadIntoSessionCache()
         {
             MyDatabaseEntities ctb = new MyDatabaseEntities();
             List<XRef_Codes> allCodes = (from x in ctb.XRef_Codes
                        orderby x.OfCodeID, x.SetAsDefault descending, x.SortOrder
                        where (x.IsImplemented == true)
                        select x).ToList();
             HttpContext.Current.Session["ListOfCodes"] = allCodes;
         }

其次 ,我添加一個類例程以通過parentID值獲取代碼。 就我而言,我有一個自引用表,其中包含諸如CodeID,CodeName,OfCodeID等字段。我這樣獲取代碼:

public List<XRef_Codes> xref_GetChildCodes(Int32 OfCodeId)
        {
            //List<XRef_Codes> allCodes = (List<XRef_Codes>)Session["ListOfCodes"];
            List<XRef_Codes> xCodes = xref_GetAllCodes();
            xCodes = (from x in xCodes
                      orderby x.OfCodeID, x.SetAsDefault descending, x.SortOrder
                      where x.OfCodeID == OfCodeId
                      select x).ToList();
            return (xCodes);
        }

接下來 ,我編輯global.asax文件。 我引用了我的班級文件夾, 即使用MyDatabase.CLASSNAME;。 然后,我在global.asax中添加一個例程,該例程調用將代碼加載到會話變量中的類例程:

void Session_Start(object sender, EventArgs e)
        {
            // Code that runs when a new session is started
            xRefCodesRepository x = new xRefCodesRepository();            
            x.xref_LoadIntoSessionCache();
        }

最后 ,在我的代碼中,我引用了會話緩存來填充各種對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM