如何使用实体框架绑定asp转发器中的数据?

时间:2017-07-19 15:06:44

标签: c# sql asp.net entity-framework linq

最初,我能够在asp转发器的代码隐藏中填充数据,如下所示:

public string guitarName = ConnectionClassGuitarItems.guitarName;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataSet ds = GetData();
        Repeater1.DataSource = ds;
        Repeater1.DataBind();

    }
}

 private void GetData()
{
    string CS = ConfigurationManager.ConnectionStrings["musicStoreConnection"].ConnectionString;
    string query = "SELECT * FROM stringInstrumentItem JOIN brand ON stringInstrumentItem.brandId = brand.brandId WHERE stringInstrumentItem.brandId IN(SELECT brand.brandId FROM brand WHERE name = @brand)";
    using (SqlConnection con = new SqlConnection(CS))
    {
        using (SqlCommand comm = new SqlCommand(query, con))
        {
            con.Open();
            comm.Connection = con;
            comm.Parameters.Add(new SqlParameter("@brand", guitar));
            comm.ExecuteNonQuery();
            SqlDataAdapter da = new SqlDataAdapter(comm);
            DataSet ds = new DataSet();
            da.Fill(ds);
            con.Close();
            comm.Parameters.Clear();

            return ds;
        }
    }

}

现在,我想将上面的代码更改为使用实体框架。到目前为止,我已经做到了这一点:

 private void GetData()
{
    MusicStoreDBEntities obj = new MusicStoreDBEntities();
    List<stringInstrumentItem> name = new List<stringInstrumentItem>();
    name = (from g in obj.stringInstrumentItems where g.brand.name == guitarName && g.type == "Guitar" select g).ToList();
    DataSet ds = new DataSet();

}

我已经将原始sql更改为使用linq到实体并添加了新条件。但我不知道如何将实体框架中的数据绑定到asp转发器。我想知道如何使用实体框架在asp转发器中绑定数据。

已编辑:

我尝试按照下面的建议绑定它,但是它给了我一个异常错误,它不包含名称'name'指向这行代码的属性:&lt;%#Eval(“name” )%&gt; &lt;%#Eval(“model”)%&gt;。正如您所看到的,eval中的名称实际上是表品牌的一部分(请参阅下面的其他信息以了解我数据库中两个表的深入了解)。我之前对使用数据集的旧数据绑定方法没有问题,但是当我将其更改为使用实体框架时,它不再识别名称。可以只是查询吗?

以下是aspx文件的完整代码:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="repeater_ItemDataBound">
    <ItemTemplate>
        <div class="one-two">
            <asp:LinkButton ID="linkButton" OnClick="Repeater1_OnClick" runat="server" CommandArgument='<%# Eval("brandId") + ";" + Eval("model") %>'>
                 <asp:Image ID="brandImage" runat="server" ImageUrl='<%# Eval("itemimage1") %>' height="130px" width="350px" />
             </asp:LinkButton>
            <div class="content">
                <div id="label"><%# Eval("name") %> <%# Eval("model") %></div>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

其他信息:

表stringInstrumentItem(列brandId是外键并引用表品牌的主键,也称为brandId):


的itemId brandId模型
1个1 XYZ
2 1 ABC
3 2 HJK

表品牌(其主键名为brandId,由表strinInstrumentItem引用):


brandId名称图像
1个伊瓦涅斯xyz.jpg
2挡泥板abc.jpg的
3吉布森hjk.jpg

1 个答案:

答案 0 :(得分:1)

private List<stringInstrumentItem> GetInstruments()
{
    var musicStoreContext = new MusicStoreDBEntities();
    List<stringInstrumentItem> instruments =
        (from g in obj.stringInstrumentItems
         where g.brand.name == guitarName && g.type == "Guitar"
         select g
        ).ToList();
    return instruments;
}

您可以将Repeater和其他控件直接绑定到强类型对象,因此只需返回模型对象的列表。

请务必立即利用strongly typed repeaters