我正在尝试在ASP.NET MVC中执行一个项目。这是我的数据库结构。
这是我的控制器类中的一个动作。
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()
这样的东西答案 0 :(得分:0)
Identity(1,1)表示自动递增,从1开始,递增1。 根据您的需要(第一个用户从0开始,在UserId上将其更改为Identity(0,1)。
答案 1 :(得分:0)
Identity(1,1)表示您的列设置为自动递增,从1开始,每行递增1。如果将其添加到模型中并不重要,这是SQL的行为,在每次插入时它将获得最大UserID,将其递增1并插入记录。
但是,在你的评论中,你再次询问如何获得最大的UserID,所以你可以试试这个:
var Id = db.Users.Max(x => x.UserId);
var newId = Id + 1;
答案 2 :(得分:0)
使用linq并添加用户时,新创建的id绑定到用户模型。
只要您还有主键自动增量
你也永远不会有一个0的返回id,它将从1开始
所以你可以去
db.Users.Add(user);
var newUserID = user.userid;
return newUserID;
或添加记录时,您应该将用户模型传递回viewModel并将其传递回视图,以便用户可以看到他们刚输入的信息。