在EF 6.2.0 Code-First中,在最新的数据模型扩展之后,我的数据模型中有一个循环引用:
Plan Hash Value : 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2 | 00:00:01 |
| 1 | FAST DUAL | | 1 | | 2 | 00:00:01 |
-----------------------------------------------------------------
n-th try of regex_replace
Plan Hash Value : 1388734953
-----------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2 | 00:00:01 |
| 1 | FAST DUAL | | 1 | | 2 | 00:00:01 |
-----------------------------------------------------------------
"所有者"是将记录输入数据库并允许对其进行更改的人。
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
字段后创建迁移时,我收到错误消息:
System.InvalidOperationException:无法确定类型之间关联的主要结尾... 必须使用关系流畅API或数据注释显式配置此关联的主要结尾。 / p>
我认为这是因为EF试图将引用匹配到单个双向引用中,这不是我想要实现的。相反,我需要两个独立的一对多参考。 Microsoft page on Fluent API对我没有帮助。
我怎样才能做到这一点?
答案 0 :(得分:2)
用于对这两个一对多关联建模的流畅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()
方法可以在没有参数的情况下使用,以指示关联在另一端没有集合导航属性。我认为这是您所引用的文档页面中的遗漏。