[英]Circular reference in EF Code-First
在EF 6.2.0 Code-First中,在最新的数据模型扩展之后,我在数据模型中有一个循环引用:
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public int OwnerId { get; set; }
[JsonIgnore]
[ForeignKey("OwnerId")]
public Player Owner { get; set; }
}
“所有者”是将记录输入数据库并被允许对其进行更改的人。
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
public int? AddressId { get; set; }
[ForeignKey("LocationId")]
[JsonIgnore]
public Location Address { get; set; }
}
“地址”是播放器的当前家庭地址。 (对于不知道其家庭住址的玩家为空)
现在,在添加了Address
和AddressId
字段之后创建迁移时,我收到错误消息:
System.InvalidOperationException:无法确定类型之间关联的主体端 ... 必须使用关系流畅的API或数据注释显式配置此关联的主体端 。
我认为这是因为EF尝试将这些引用匹配为一个单一的双向引用,这不是我想要实现的。 相反,我需要两个独立的一对多引用。 在Fluent API上的Microsoft页面对我没有帮助。
我该如何实现?
用于建模这两个一对多关联的流利API是:
modelBuilder.Entity<Player>()
.HasOptional(p => p.Address)
.WithMany()
.HasForeignKey(p => p.AddressId);
modelBuilder.Entity<Location>()
.HasRequired(l => l.Owner)
.WithMany()
.HasForeignKey(l => l.OwnerId);
如您所见, WithMany()
方法可以不带参数使用,以指示该关联在另一端没有集合导航属性。 我认为这是您所参考的文档页面中的一个遗漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.