C# 从数据库第一实体框架6.2中的SaveChanges中删除标识列
我有一个SQL Server表Organization,它有一个唯一标识符作为PK。客户要求添加一个身份栏作为“友好id” 现在返回“不支持使用“标识”模式修改列。”C# 从数据库第一实体框架6.2中的SaveChanges中删除标识列,c#,sql-server,entity-framework-6,C#,Sql Server,Entity Framework 6,我有一个SQL Server表Organization,它有一个唯一标识符作为PK。客户要求添加一个身份栏作为“友好id” 现在返回“不支持使用“标识”模式修改列。” 有没有一种方法可以标记标识列,这样database first EF就不会更新它,除非将其更改为会影响许多其他部分的PK?可能有一个属性可以使用。但我不知道。作为一种解决方法,您能否单独设置组织对象属性 Organization=\u db.Organizations.Find(organizationSource.UId); _
有没有一种方法可以标记标识列,这样database first EF就不会更新它,除非将其更改为会影响许多其他部分的PK?可能有一个属性可以使用。但我不知道。作为一种解决方法,您能否单独设置组织对象属性
Organization=\u db.Organizations.Find(organizationSource.UId);
_db.Entry(organization).Property(a=>a.MyProperty1).CurrentValue=organizationSource.MyProperty1;
_db.Entry(organization).Property(a=>a.MyProperty2).CurrentValue=organizationSource.MyProperty2;
//除主键和标识属性外的所有属性的等
_db.SaveChanges();
或者,另一个选项可能是从
organizationSource
类定义中删除您的标识属性(假设您控制了organizationSource类)。属性是否映射为?EF正在从数据库表生成类。它将StoreGeneratedPattern设置为Identity。然后将set设置为computed。我可以手动设置属性,但我并不期待这样做,因为有许多属性和许多表要求进行此类更改。我想我可以使用AutoMapper将organizationSource映射到一个没有identity属性的新类,但这意味着要维护两个类。@NeilN然后可能使用反射来循环属性,不包括identity属性?尽管如此,使用反射将是最后的手段。或让您的组织继承OrganizationSource类,而您的组织类具有附加的identity属性。更容易维护。。。但还是有两门课。希望有人能找到一种使用属性的方法。可能值得将您的组织类定义添加到您的问题中。
Organization organization = _db.Organizations.Find(organizationSource.UId);
_db.Entry(organization).CurrentValues.SetValues(organizationSource);
_db.SaveChanges();