繁体   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