繁体   English   中英

使用实体框架LINQ将唯一主键插入数据库

[英]Insert Unique Primary Key into Database using Entity-Framework LINQ

插入其他表数据时,我想在数据库中输入唯一索引值。 在这种情况下,我的表索引列ID唯一的,但不是自动递增的。

我也想检查目标表中索引值的最大值。 如果表为空,则索引值从0开始,或者如果表包含1行,则索引值从2开始。

我已经可以使用存储过程成功完成此操作。 但是我想在保存数据时使用实体框架执行此操作。

我的存储过程是:

ALTER PROCEDURE [dbo].[CreatePerson]
   @Name Nvarchar(50),
   @Code Nvarchar(50)
AS
BEGIN
   Declare @Id int
   SET @Id = ISNULL(((SELECT MAX([id]) FROM dbo.tbl_Person)+1),'1')

   Insert Into dbo.tbl_Person([Id], [Name], [Code])
   Values (@id, @Name, @Code)
END

谁能告诉我该索引值保存过程的LINQ命令是什么?

将您的SQL存储过程直接转换为Linq基本上是这样的:

var newId = ctx.Persons.Any() ? ctx.Persons.Select(p => p.Id).Max() + 1 : 1;
var newPerson = new Person { Id = newId, Name = someName, Code = someCode };
ctx.Persons.Add(newPerson);
ctx.SaveChanges();

注意:绝对不建议使用此解决方案在数据库中插入唯一ID,请在问题下方的注释中仔细考虑Sharped和Magnus的建议,以更好地使用自动增量或随机引导来解决您的问题。

使用自动递增的id列,您的代码将如下所示:

var newPerson = new Person { Name = someName, Code = someCode };
ctx.Persons.Add(newPerson);
ctx.SaveChanges();
var newId = newPerson.Id;

请注意,EF会自动以代码形式为您更新新创建的实体的id列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM