繁体   English   中英

EF Code-First中的循环参考

[英]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; }
}

“地址”是播放器的当前家庭地址。 (对于不知道其家庭住址的玩家为空)

现在,在添加了AddressAddressId字段之后创建迁移时,我收到错误消息:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM