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

EntityFramework匿名复合键属性名冲突分享

时间:2023-04-10 21:50:16 C#

EntityFramework匿名复合键属性名冲突,对象之间包含正确的引用。这对我来说并不是什么新鲜事,而且一切进展顺利。现在在这种情况下,我有一些复合键,有时包括表的外键(在这种情况下是对象)。为此,我在HasKey()的OnModelCreating方法上使用了HasKey()函数。当属性名称不同时,没有问题,但是当属性名称相同时,迁移将失败。一个例子:protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){//...modelBuilder.Entity().ToTable("PatientVisits");modelBuilder.Entity().HasKey(x=>new{x.Patient.Code,x.Code});//...base.OnModelCreating(modelBuilder);正如您在所提供的代码中看到的那样,对象PatientVisit有一个名为Code的属性,但是只要对不同的患者重复此属性,就可以重复此属性。实体Patient也有一个名为Code的键。匿名类型不能推断出两个具有相同名称的属性(很明显)。典型的解决方案是像这样命名匿名类型的属性:modelBuilder.Entity().HasKey(x=>new{PatientCode=x.Patient.Code,VisitCode=x.Code});//...base.OnModelCreating(modelBuilder);但是这样做,当我尝试添加迁移时,它会抛出此错误信息。属性表达式'x=>newf__AnonymousType3`2(PatientCode=x.Patient.Code,VisitCode=x.Code)'无效。该表达式应表示一个属性:C#:'t=>t.MyProperty'VB。网络:'函数(t)t.MyProperty'。当指定多个属性时使用匿名类型:C#:'t=>new{t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)NewWith{t.MyProperty1,t.MyProperty2}'。我认为您需要做的是为PatientVisit提供一个新属性PatientCode。这是Patient的外键。比如HasRequired(v=>v.Patient).WithMany().HasForeignKey(v=>v.PatientCode)那么就可以做上面的C#学习教程:EntityFramework匿名复合键属性名称冲突。会用到,需要详细了解C#学习教程。希望大家多多关注——modelBuilder.Entity().HasKey(x=>new{x.PatientCode,x.Code});本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: