asp.net中的值不能为null错误

时间:2017-07-13 14:17:20

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

我想知道为什么它会在我下面的代码中返回一个空值:

using (var context = new MusicStoreDBEntities())
{
    var bay = (from g in context.stringInstrumentItems
               where g.brand.name == name.Text select g)
               .FirstOrDefault();
    context.stringInstrumentItems.Remove(bay);
    context.SaveChanges();
}

var bay返回null。我做错了什么?这是我试图变成实体框架的等效原始sql查询:

string queryGuitarItems = "DELETE S FROM stringInstrumentItem S JOIN brand B ON S.brandId = B.brandId WHERE B.name = @brand";
using (SqlConnection connectionGuitarItems = new SqlConnection(ConfigurationManager.ConnectionStrings["musicStoreConnection"].ToString()))
{
    using (SqlCommand commandGuitarItems = new SqlCommand(queryGuitarItems, connectionGuitarItems))
    {
        connectionGuitarItems.Open();
        commandGuitarItems.Connection = connectionGuitarItems;
        commandGuitarItems.Parameters.Add(new SqlParameter("@brand", name.Text));
        commandGuitarItems.ExecuteNonQuery();

        connectionGuitarItems.Close();
        commandGuitarItems.Parameters.Clear();

    }
}

如果两个查询相似或不相同,请告诉我。我真的试图将所有原始sql查询更改为实体框架,这是一个开始。

1 个答案:

答案 0 :(得分:1)

您尚未在linq查询中包含您的联接。由于您尚未包含Brand,因此根据您的where条款未获取任何记录。

由于您正在使用实体框架,您可以尝试这样的事情:

using System.Data.Entities;

using (var context = new MusicStoreDBEntities())
{
    var bay = context.stringInstrumentItems.Include(i => i.brand)
        .FirstOrDefault(x => x.brand.name == name.Text);

    if (bay != null)
    {
        context.stringInstrumentItems.Remove(bay);
        context.SaveChanges();
    }
}

.Include()从数据库获取相关brand记录的方式与JOIN在SQL代码中的记录相同,因此您现在应该有一条记录。

排除它的问题与连接两侧没有匹配记录的问题相同 - 查询不会选择任何记录。