Linq查询不返回值

时间:2015-05-15 11:46:10

标签: c# asp.net-mvc-5

我目前有2个dbContexts,我不确定这是否有所作为。 ApplicationDbContext和CompanyDBContext。这些表已经在数据库中设置,我在companydetails表中添加了数据。

我的代码可能有一些问题,我不确定我在视图中做了什么关于companyID是正确的,但主要是我的问题是我不确定为什么我的linq查询没有返回任何结果当我的表格中有数据时。

我的CompanyDBContext按原样

public class CompanyDBContext : DbContext
{
    public DbSet<CompanyDetails> companies { get; set; }
}

这是我的模特

public class CompanyDetails
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int? companyID { get; set; }

    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
}

我编写了一个linq查询,该查询应该返回我放入数据库的一行。使用这个linq查询,然后构建一个SelectListItems列表,我将其传递给viewbag,然后我希望能够有一个带有公司名称的下拉框,用户可以在其中选择。

 public ActionResult Register()
    {
        //var regViewModel = new RegisterViewModel();

        List<SelectListItem> companyList = null;

        using(var companies = new CompanyDBContext())
        {
            var companyNamesQuery = (from comp in companies.companies
                                     select new SelectListItem
                                     {
                                         Text = comp.CompanyName,
                                         Value = comp.companyID.ToString()
                                     });
            companyList = companyNamesQuery.ToList();

            @ViewBag.companies = companyList;
        }

        return View();
    }

这是视图,

    @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Create a new account.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.userCompanyID, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "companyID", "CompanyName"))
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-default" value="Register" />
        </div>
    </div>
}

这是我的连接字符串

    <add name="DefaultConnection" connectionString="Data Source=xxxxxx\SQLEXPRESS;Initial Catalog=DBTest;User ID=x;Password=Xxxxx1;Persist Security Info=False;" providerName="System.Data.SqlClient" />
<add name="DevConnection" connectionString="Data Source=xxxxxx\SQLEXPRESS;Initial Catalog=DBTest;User ID=x;Password=Xxxxx1;Persist Security Info=False;" providerName="System.Data.SqlClient" />

2 个答案:

答案 0 :(得分:0)

根据评论,仔细检查您的连接字符串。您指向错误的服务器,错误的数据库或数据从未进入表中。

这一行:

@Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "companyID", "CompanyName"))

在这一行:

var companyNamesQuery = (from comp in companies.companies
                                 select new SelectListItem
                                 {
                                     Text = comp.CompanyName,
                                     Value = comp.companyID.ToString()
                                 });

您创建了一个新的SelectListItem列表。您的视图中只有属性文本和值可用。

此下拉列表应为:

@Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "Value", "Text"))

答案 1 :(得分:0)

答案是因为我没有使用正确的连接字符串。当我创建了与我的dbContext名称不同的新连接字符串时,我没有将连接字符串传递给基类