当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-AttributesofentitytypesarepartofthekeyandthereforecannotbemodifiedormarkedasmodifiedShare

时间:2023-04-11 02:50:09 C#

Entitytypepropertiesarepartofthekeyandthereforecannotbemodifiedormarkedasmodified我使用EntityFramework7.0.0-rc1-final和SQL2014LocalDB(代码优先)。我有模型类:publicclassUnitGroup{publicintUnitGroupId{get;私有集;}公共字符串名称{得到;放;}publicObservableCollectionUnitSet{get;放;}publicUnitGroup(){UnitSet=newObservableCollection();我使用这个委托进行流畅的配置:ActionUnitGroupConfig=delegate(EntityTypeBuildere){e.Property(p=>p.Name).IsVarchar(25).IsRequired();e.HasAlternateKey(p=>p.Name);};IsVarchar()是我的扩展方法:然后我这样使用它:protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){modelBuilder.Entity(e=>UnitGroupConfig(e));这是此表的迁移代码:migrationBuilder.CreateTable(name:"UnitGroup",columns:table=>new{UnitGroupId=table.Column(nullable:false).Annotation("SqlServer:ValueGenerationStrategy",SqlServerValueGenerationStrategy.IdentityColumn),Name=table.Column(type:"varchar(25)",nullable:false)},约束条件:table=>{table.PrimaryKey("PK_UnitGroup",x=>x.UnitGroupId);table.UniqueConstraint("AK_UnitGroup_Name",x=>x.Name);});迁移后,我的Db中有一个表:UnitGroup表我需要在我的Prism数据模块中封装EF我有一个类:publicclassDataService:IDataService{privateDataContextcontext;publicDataService(){context=newDataContext();}publicIQueryableGetAsTracking(paramsExpression[]includes)whereT:class{returnincludes.Aggregate(context.Set().AsTracking(),(source,expression)=>{if(expression.BodyisMemberExpression){returnsource.Include(expression);}returnsource;});}publicintSaveChanges(){returncontext.SaveChanges();最后,我尝试运行这样的代码:vards=newDataService();varug=ds.GetAsTracking().First();ug.Name="新值";ds.SaveChanges();并收到此错误:类型“UnitGroup”上的实体属性“名称”是键的一部分,因此无法修改或标记为已修改。我在这里发现了一个类似的问题。这就是一直编辑主键的问题。我检查了所有描述的部分两次。属性名称不是主键的一部分,它是唯一键的一部分。当我使用EF6时,我在部分迁移类中有代码:CreateIndex("UnitGroup","Name",unique:true);它创建了相同的唯一密钥,我可以编辑名称。为什么现在在EF7中这不可能?感谢RowanMiller,我解决了这个问题。他说:在EFCore中,备用键被设计为用作关系的目标(即会有一个外键指向它)。目前EF不支持更改值。如果我想要属性的唯一索引,那我就得用这段代码了:以上是C#学习教程:实体类型的属性是键的一部分,所以不能修改,也不能标记为已修改分享全文内容,如果对大家有用并且需要了解更多C#学习教程,希望大家多多关注—modelBuilder.Entity().HasIndex(u=>u.Name).IsUnique();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢