相关疑难解决方法(0)

如何强制实体框架插入标识列?

我想编写一些C#代码来使用一些种子数据初始化我的数据库.显然,这需要能够在插入时设置各种Identity列的值.我正在使用代码优先的方法.默认情况下,DbContext处理数据库连接,因此您不能SET IDENTITY_INSERT [dbo].[MyTable] ON.所以,到目前为止我所做的是使用DbContext构造函数,它允许我指定要使用的数据库连接.然后,我设置IDENTITY_INSERTON该数据库的连接,然后尝试使用实体框架插入我的记录.这是我到目前为止所得到的一个例子:

public class MyUserSeeder : IEntitySeeder {
    public void InitializeEntities(AssessmentSystemContext context, SqlConnection connection) {
        context.MyUsers.Add(new MyUser { MyUserId = 106, ConceptPersonId = 520476, Salutation = "Mrs", Firstname = "Novelette", Surname = "Aldred", Email = null, LoginId = "520476", Password="28c923d21b68fdf129b46de949b9f7e0d03f6ced8e9404066f4f3a75e115147489c9f68195c2128e320ca9018cd711df", IsEnabled = true, SpecialRequirements = null });
        try {
            connection.Open();
            SqlCommand cmd = new SqlCommand("SET IDENTITY_INSERT [dbo].[MyUser] ON", connection);
            int retVal = cmd.ExecuteNonQuery();
            context.SaveChanges();
        }
        finally {
            connection.Close(); …
Run Code Online (Sandbox Code Playgroud)

database sql-server asp.net entity-framework ef-code-first

54
推荐指数
5
解决办法
7万
查看次数

首先使用代码禁用整数主键上的标识(自动递增)

我在ASP.NET MVC 3应用程序中使用代码优先方法,并且models(public int Id { get; set; })中的所有整数主键默认配置为具有自动递增的标识.如何禁用此功能并启用手动输入主键的整数?

实际情况是Id整数具有特殊含义,因此我希望它们在创建时可以选择,然后可以编辑.如果在创建时未给出整数,则自动递增,这将是理想的,否则使用指定的值.但可编辑的主要字段是我的主要需求.在ASP.NET MVC 3中有没有办法优雅地做到这一点?

entity-framework asp.net-mvc-3

38
推荐指数
4
解决办法
3万
查看次数

为什么这个带有IDENTITY_INSERT的EF插入不起作用?

这是查询:

using (var db = new AppDbContext())
{
    var item = new IdentityItem {Id = 418, Name = "Abrahadabra" };
    db.IdentityItems.Add(item);
    db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Test.Items ON;");
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

执行时,Id新表上的插入记录仍为1.

新:当我使用交易或TGlatzer的答案时,我得到例外:

当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'Items'中的标识列指定显式值.

c# entity-framework identity-insert entity-framework-6

9
推荐指数
3
解决办法
8876
查看次数

在 Entity Framework Core 中复制整行

我正在尝试从数据库中检索一行,更改其中的某些列值并将其添加为新行(实体框架核心),

但它给了我错误

当 IDENTITY_INSERT 设置为 OFF 时,无法为表“Audit_Schedules”中的标识列插入显式值。

该表有一个主键“ScheduleId”

下面是我的代码

 AuditSchedules _schedules = new AuditSchedules();
 using (var ctx = new QuestionnaireEntities(_configuration))
                {
                    _schedules = ctx.AuditSchedules.Where(x => x.ScheduleId == model.ScheduleID).SingleOrDefault();
                    _schedules.StaffId = model.TransferedAuditorCode;
                    _schedules.StaffName = model.TransferedAuditorName;
                    _schedules.FromDate = _schedules.ToDate = Convert.ToDateTime(model.TransferedScheduleDate);
                    ctx.AuditSchedules.Add(_schedules);
                    ctx.SaveChanges();

                    _subschedules = ctx.AuditSubSchedule.Where(x => x.SubScheduleId == model.SubScheduleID).SingleOrDefault();
                    _subschedules.IsHoliDay = "Y";
                    _subschedules.HolidayType = model.HolidayType;
                    _subschedules.TransferedScheduleId = _schedules.ScheduleId.ToString();
                    ctx.AuditSubSchedule.Update(_subschedules);
                    ctx.SaveChanges();
                }
Run Code Online (Sandbox Code Playgroud)

错误进来

ctx.AuditSchedules.Add(_schedules);
Run Code Online (Sandbox Code Playgroud)

首先我认为它与 Schedule_ID 的值冲突并且无法添加重复的 Primary Key ,但 Schedule_ID 是自动生成的字段,因此不应发生此问题

我也尝试将其设置为不同的值

_schedules.ScheduleId = 0;
Run Code Online (Sandbox Code Playgroud)

但它不插入。我如何复制一行中几乎没有变化的行(想添加一个新行但修改了值)

c# entity-framework-6 entity-framework-core

5
推荐指数
1
解决办法
1586
查看次数