【问题标题】:How to get database entries in ASP.NET MVC?如何在 ASP.NET MVC 中获取数据库条目?
【发布时间】:2016-12-02 03:18:25
【问题描述】:

我正在尝试在 ASP.NET MVC 中做一个项目。这是我的数据库结构。

Database Structure

这是我的控制器类中的一个动作。

public class UsersController : Controller
{
    private myDBEntities db = new myDBEntities();

    // GET: Users
    public ActionResult Index()
    {
        return View(db.Users.ToList());
    }

    // GET: Users/Create
    public ActionResult Create()
    {
        return View();
    }

    // POST: Users/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "UserId,Email,Password,FirstName,LastName,Gender,Birthday,AboutUser",Exclude ="UserId")] User user)
    {
        if (ModelState.IsValid)
        {
            db.Users.Find(user);
            db.Users.Add(user);
            db.SaveChanges();

            return RedirectToAction("Index");

        }

        return View(user);
    }    
}

这是我用来生成数据库表的数据库代码。

CREATE TABLE [dbo].[Users]
(
    [UserId] INT Identity(1,1) NOT NULL PRIMARY KEY, 
    [Email] VARCHAR(100) NOT NULL, 
    [Password] VARCHAR(100) NOT NULL, 
    [FirstName] VARCHAR(100) NOT NULL, 
    [LastName] VARCHAR(100) NOT NULL, 
    [Gender] VARCHAR(10) NOT NULL, 
    [Birthday] DATETIME NOT NULL, 
    [AboutUser] VARCHAR(1500) NOT NULL
)

在这里,我正在尝试为用户创建一种输入有关其电子邮件、名字、姓氏等信息的方法,当他们这样做时,我希望将这些详细信息添加到数据库中,当发生这种情况时,我希望 UserId 成为生成。所以在我的控制器的创建方法中,我想要一种方法来获取前一个用户的 id。第一个登录的用户会得到一个 id = 0 ,然后我想检索这个 id 并继续增加它。那我该怎么做呢?

TLDR:我想要类似 db.tableName.getRow()

【问题讨论】:

  • 您的UserId 已经是一个自动递增的字段。你没有设置它。
  • 是的,我是这样设置的,但是没有人将 UserId 值添加到数据库中,对吧?从视图来看,用户只能输入除 UserId 之外的所有内容,但在我的代码中,我没有指定要输入数据库的 UserId 的值。
  • 它是一个自动递增的字段 - 它是自动完成的!
  • 您的 TLDR 具有误导性。我以为您因此没有数据上下文。现在我不确定你在这里问什么。
  • 您是否为主键添加了 ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1) ?

标签: c# sql-server asp.net-mvc asp.net-mvc-4


【解决方案1】:

Identity(1,1) 表示自动递增,从 1 开始递增 1。 对于您想要的(从 0 开始的第一个用户,将其更改为 UserId 上的 Identity(0,1)。

【讨论】:

  • 是的,我知道,但问题是我从我的操作中排除了 UserId。所以没有模型绑定意味着我必须明确地将它添加到数据库中,我只想知道如何做到这一点。
【解决方案2】:

Identity(1,1) 表示您的列设置为自动递增,从 1 开始,每行递增 1。是否将其添加到模型中并不重要,这是 SQL 的行为,每次插入时它将获得最大的 UserID,将其增加 1 并插入记录。

但是由于在您的 cmets 中您再次询问如何获取最大 UserID,因此您可以尝试以下操作:

var Id = db.Users.Max(x => x.UserId);
var newId = Id + 1;

【讨论】:

    【解决方案3】:

    当使用 linq 并添加用户时,新创建的 id 绑定到用户模型。

    只要你有一个主键自动递增也

    您也永远不会返回 0 的 id,它将以 1 开头

    这样你就可以走了

    db.Users.Add(user);
    var newUserID = user.userid;
    
    return newUserID;
    

    或者在添加记录时,您应该将用户模型传回给 viewModel 并将其传回给视图,以便用户可以看到他们刚刚输入的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多