【问题标题】:ASP.NET MVC4 Setting up DB Context and ModelsASP.NET MVC4 设置数据库上下文和模型
【发布时间】:2013-10-27 11:11:45
【问题描述】:

我正在处理一个 ASP.NET MVC4 项目(学校项目,所以我正在学习框架),试图获得具有代码优先视角的工作实体框架 6.0。我创建了我的模型 (/Models/) 和 DbContext,如下所示:

using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace Autokereskedes.Models
{
    public class AutoDb : DbContext
    {
        public DbSet<Car> Cars { get; set; }
        public DbSet<Reservation> Reservations { get; set; }
        public DbSet<Depo> Depos { get; set; }
        public DbSet<User> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

            base.OnModelCreating(modelBuilder);
        }
    }
}

但是当我想在我的控制器中使用它时,我得到一个错误

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Autokereskedes.Models;

namespace Autokereskedes.Controllers
{
    public class AccountController : Controller
    {

......

private bool IsUserDataValid(string email, string password)
{
    bool r = false;
    var crypto = new SimpleCrypto.PBKDF2();
    using (var d = new AutoDb())
    {
        var user = new d.SystemUsers.FirstOrDefault( u => u.email == email);
        if (user != null && user.Password == crypto.Compute(password))
        {
            r = true;
        }
    }

    return r;
}

错误是:

Error   1   The type or namespace name 'd' could not be found (are you missing a using directive or an assembly reference?) C:\_temp\stackoverflow\Autokereskedes\Controllers\AccountController.cs  64  32  Autokereskedes

另外,我无法真正使用模型,我想我在编写表关系时犯了错误(我的表主要有一对多关联),但当我使用模型时,我得到了外键错误(家庭控制器)。

我的整个项目可以在这里访问:download

感谢您的时间和帮助,我在这里很迷茫,浏览教程但仍然没有抓住重点。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-mvc-4 dbcontext


    【解决方案1】:

    我想应该是

    var user = new d.Users.FirstOrDefault( u => u.email == email);
    

    【讨论】:

      【解决方案2】:

      可以试试这个

       var user = d.Users.ToList().FirstOrDefault(u => u.Email == email);
      

      【讨论】:

        【解决方案3】:

        .NET 认为您正在尝试在命名空间 d.SystemUsers 中实例化一个名为 FirstOrDefault 的类,而您只是尝试引用刚刚创建的 d 对象的 SystemUsers 属性..

        所以尝试删除“新”:

        using (var d = new AutoDb())
        {
            var user = d.SystemUsers.FirstOrDefault( u => u.email == email);
            if (user != null && user.Password == crypto.Compute(password))
            {
                r = true;
            }
        }
        

        【讨论】:

        • 是的,我都犯了一个错误,调用 SystemUsers 而不是 User
        猜你喜欢
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多