0

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

以下是 [Contact] 表中的字段示例: FirstName (vchar(50) LastName (vchar(50) xPrefix (int) xSuffix (int) xReferral (int) xStatus (int) xGender (int) xMaritalStatus (int) xAgeGroup (整数)

我有一个名为 [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”等。

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

4

1 回答 1

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();
        }

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

于 2013-01-19T05:54:36.710 回答