Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq to实体将数据库标识值替换为dropdownlist中的文本值_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 使用linq to实体将数据库标识值替换为dropdownlist中的文本值

C# 使用linq to实体将数据库标识值替换为dropdownlist中的文本值,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一个保存用户信息的表单。表单元素之一是包含国家列表的下拉列表。formview绑定到存储国家ID而不是国家名称的数据库表。我在Users表和Countries表之间定义了一个外键。。这也反映在我的实体数据模型中 假设框架知道这两个表之间的关系,那么在网页上显示用户数据时,用国家ID替换国家名称的最快方法是什么?我目前正在运行以下代码来完成此任务: protected void CstCountryLabel_DataBinding(object sender, EventArgs e)

我有一个保存用户信息的表单。表单元素之一是包含国家列表的下拉列表。formview绑定到存储国家ID而不是国家名称的数据库表。我在Users表和Countries表之间定义了一个外键。。这也反映在我的实体数据模型中

假设框架知道这两个表之间的关系,那么在网页上显示用户数据时,用国家ID替换国家名称的最快方法是什么?我目前正在运行以下代码来完成此任务:

protected void CstCountryLabel_DataBinding(object sender, EventArgs e)
    {
        using (kdEntities db = new kdEntities())
        {
            Label lbl = sender as Label;

            int cntID = int.Parse(Eval("CstCntID").ToString());

            IQueryable<Country> countries = from Countries in db.Countries
                                                  where Countries.CntID == cntID
                                                  select Countries;

            var firstOrDefault = countries.FirstOrDefault();
            lbl.Text = firstOrDefault != null ? firstOrDefault.CntDescription : "";
        }
    }
protectedvoid cstccountrylabel\u数据绑定(对象发送方,事件参数e)
{
使用(kdEntities db=new kdEntities())
{
标签lbl=发送者作为标签;
int cntID=int.Parse(Eval(“CstCntID”).ToString();
IQueryable countries=来自数据库国家/地区中的国家/地区
其中Countries.CntID==CntID
选定国家;
var firstOrDefault=国家/地区。firstOrDefault();
lbl.Text=firstOrDefault!=null?firstOrDefault.CntDescription:“”;
}
}

对我来说,似乎有更好的方法,因为我已经在实体框架图中定义了两个表之间的关系。

通常,我在使用实体时完全以模型为中心。在不知道如何定义实体关系的情况下,我将使用CodeFirst

班级 使用者
[表(“tblUsers”)]
类用户
{
公共int ID{get;set;}
公共字符串名称{get;set;}
public int CountryID{get;set;}
[外国钥匙(“CountryID”)]
公共虚拟国家{get;set;}
}
国家
[表(“TBLComcountries”)]
公营国家
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共静态国家/地区查找(MyContext数据库,int-id)
{
返回db.Countries.Find(id);
}
公共静态国家/地区查找(MyContext数据库,字符串CountryName)
{
var matches=来自db.Countries中的c,其中c.Name==CountryName选择c;
如果(匹配.Count()>0)
{
返回匹配项。First();
}
其他的
{
返回null;
}
}
}
上下文
class MyContext:DbContext
{
公共MyContext():base()
{
}
公共数据库集用户{get;set;}
公共数据库集国家{get;set;}
}
弄乱那些数据
public void Main()
{
MyContext db=新的MyContext();
加拿大国家=Country.Find(db,“加拿大”);
var users=数据库中的u。用户选择u;
foreach(用户中的用户u)
{
u、 国家=加拿大;
}
db.SaveChanges();
}
通过这种方式,EntityFramework可以完成设置参考值的工作,您所需要担心的就是使用具体对象

同样,我不知道你们的实体采取什么形式,但实体框架在它的化身之间基本上是一致的

显示下拉列表应该非常简单。我最近在一个MVC应用程序中用列表框做了类似的事情(我写的是国家对象,但在我的例子中我做的是电话运营商)。我创建了一个ViewModel类来包含我的用户记录,还创建了一个SelectList,其中包含所有国家的列表、TextValue(countryName)和DataValue(CountryID),以及一个函数来确定是否要在列表中选择任何特定元素。它看起来像这样:

视图模型
公共类UserProfileViewModel
{
公共UserProfileViewModel()
{
AllCarriers=new AspAppServicesContext().Carriers.ToList();
selcharrier=新选择列表(所有承运人,“ID”,“名称”,空);
}
公共用户配置文件ViewModel(RegisterModel配置文件)
{
this.MyProfile=profile;
AllCarriers=new AspAppServicesContext().Carriers.ToList();
selcharrier=new SelectList(所有载体,“ID”,“Name”,this.MyProfile.CarrierID);
}
公共注册表模型MyProfile{get;set;}
公共列表所有载体{get;set;}
公共选择列表selcharrier{get;set;}
公共对象SelectedCarrier{get;set;}
}
列表框示例

@LabelFor(m=>m.CarrierID)
@Html.ListBox(“SelectedCarrier”,Model.selcharrier)
在本例中,输出的页面将有一个名称为SelectedCarrier的列表框,列表框中的每个项目都类似于:

<option value="1">Canada Telecom</option>

通常,在使用实体时,我完全以模型为中心。在不知道如何定义实体关系的情况下,我将使用CodeFirst

班级 使用者
[表(“tblUsers”)]
类用户
{
公共int ID{get;set;}
公共字符串名称{get;set;}
public int CountryID{get;set;}
[外国钥匙(“CountryID”)]
公共虚拟国家{get;set;}
}
国家
[表(“TBLComcountries”)]
公营国家
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共静态国家/地区查找(MyContext数据库,int-id)
{
返回db.Countries.Find(id);
}
公共静态国家/地区查找(MyContext数据库,字符串CountryName)
{
var matches=来自db.Countries中的c,其中c.Name==CountryName选择c;
如果(匹配.Count()>0)
{
返回匹配项。First();
}
其他的
{
返回null;
}
}
}
上下文
class MyContext:DbContext
{
公共MyContext():base()
{
}
公共数据库集用户{get;set;}
公共数据库集国家{get;set;}
}
弄乱那些数据
public void Main()
{
MyContext数据库