如何使用实体框架设置“数据库优先”查找表

时间:2013-01-08 07:12:35

标签: c# asp.net entity-framework-4

我是实体框架的新手,是C#,但不是SQL。我有表[Contact],其中多个字段引用了一个名为[XRef_Codes]的查找表。首先,我想将asp.net webform上的所有下拉列表绑定到页面加载时的筛选查找表。其次,我希望能够在联系人实体模型中公开查找值(整数和文本值)(见下文)

以下是该字段的示例 [联系方式]表格 FirstName(vchar(50) LastName(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(bit)

[1]在我的asp.net表单中,我想填充已排序/已过滤的下拉列表FROM xRef_Codes表WHERE OfCodeID = ## ORDER BY SetAsDefault,SortOrder。在页面加载中,我会一次绑定所有下拉列表。

[2]我想将相关的XRef_Codes“CodeName”值作为联系对象/实体的一部分。所以我可以看到contact.prefix.CodeName =“先生。”和contact.suffix.CodeName =“Sr.”和contact.gender.CodeName =“男”等。

最好的方法是什么?有些人可以帮助我理解我是否需要关联实体框架设计器中的所有这些字段?

1 个答案:

答案 0 :(得分:1)

我是新手,所以我想我会分享我旅程的成果。我的解决方案是使用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();
        }

最后,在我的代码中,我引用会话缓存来填充各种对象。