mgs*_*dew 2 c# asp.net linq-to-sql entity-framework-4
我想在插入其他表数据时在我的数据库中输入唯一索引值.在这种情况下,我的表索引列ID是唯一的但不是自动递增.
我还想检查目标表中索引值的最大值.如果表为空,则索引值从0开始,如果它包含1行,则索引值从2开始.
我已经可以使用存储过程成功执行此操作.但我希望在保存数据时使用Entity Framework执行此操作.
我的存储过程是:
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
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我这个索引值保存过程的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();
Run Code Online (Sandbox Code Playgroud)
注意:当然不建议将此解决方案用于在数据库中插入唯一ID,在问题下方的注释中仔细考虑Sharped和Magnus的建议,以便更好地使用自动增量或随机guid来解决您的问题.
使用自动递增的id列,您的代码将如下所示:
var newPerson = new Person { Name = someName, Code = someCode };
ctx.Persons.Add(newPerson);
ctx.SaveChanges();
var newId = newPerson.Id;
Run Code Online (Sandbox Code Playgroud)
请注意,EF将自动在代码中为您更新新创建的实体的id列.
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |