我有以下两个实体,我试图使用外键关联来关联(一对一)。
public class StandardRack {
public int Id {get;set}
public StandardRelay StandardRelay {get;set}
}
public class StandardRelay {
public int Id {get;set}
public int StandardRack_Id {get;set;}
[Required][ForeignKey("StandardRack_Id")]
public StandardRack StandardRack { get; set; }
}
这会抛出 ModelValidationException。为什么无法配置这种看似简单的一对一双向关系的任何想法。
Edit:
这是例外情况:
System.Data.Entity.ModelConfiguration.ModelValidationException 被捕获
消息=在模型生成过程中检测到一个或多个验证错误:
System.Data.Edm.EdmAssociationEnd::多重性在关系“StandardRelay_StandardRack”中的角色“StandardRelay_StandardRack_Source”中无效。由于从属角色属性不是关键属性,因此从属角色的重数上限必须为“*”。
来源=EntityFramework
堆栈跟踪:
在 System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.ValidateAndSerializeCsdl(EdmModel 模型,XmlWriter 编写器)
在 System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.ValidateCsdl(EdmModel 模型)
在 System.Data.Entity.DbModelBuilder.Build(DbProviderManifest 提供程序清单,DbProviderInfo 提供程序信息)
在 System.Data.Entity.DbModelBuilder.Build(DbConnection 提供者连接)
在System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext内部上下文)
在 System.Data.Entity.Internal.RetryLazy2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet
1.初始化()
在 System.Data.Entity.Internal.Linq.InternalSet1.GetEnumerator()
at System.Data.Entity.Infrastructure.DbQuery
1.System.Collections.Generic.IEnumerable.GetEnumerator()
在 System.Collections.Generic.List1..ctor(IEnumerable
1 集)
在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 源)
在 D:\RailwayProjects\RelayAnalysis\TestApplication\MainWindow.xaml.cs 中的 TestApplication.MainWindow.Window_Loaded(Object sender, RoutedEventArgs e) 处:第 33 行
内部异常:
实体框架不支持一对一的外键关联。您必须删除外键并使用共享主键(依赖项的主键同时也是其对主体的外键):
public class StandardRack {
public int Id {get;set}
public StandardRelay StandardRelay {get;set}
}
public class StandardRelay {
public int Id {get;set}
public StandardRack StandardRack { get; set; }
}
Fluent API 中的映射:
modelBuilder.Entity<StandardRack>()
.HasOptional(rack => rack.StandardRelay)
.WithRequired(relay => relay.StandardRack);
(我在这里保证StandardRack
有一个可选的继电器。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)