实体框架自我引用实体

时间:2017-10-05 09:28:15

标签: c# entity-framework

我正在构建一个数据库来存储双重淘汰赛锦标赛。锦标赛中的每场比赛都有两队相互比赛。在第一轮比赛中,球队根据种子进行固定。在随后的几轮比赛中,球队是之前比赛的赢家和输家。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nav-side-menu">
	<div class="brand">Brand Logo</div>
	<i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i>
	<div class="menu-list">
		<ul id="menu-content" class="menu-content collapse out">
			<li>
				<a href="new-patient.php">
					<i class="fa fa-plus-square"></i>New Patient
				</a>
			</li>
			<li>
				<a href="returning-patient.php">
					<i class="fa fa-plus-square"></i>Returning Patient
				</a>
			</li>
		</ul>
	</div>
</div>

对于两个团队中的每个团队,都有一个TeamSourceType,用于指示团队的确定方式。如果TeamSourceType1 / 2指定前一场比赛的赢家或输家,我需要SourceMatch1 / 2来引用获胜者/输家的比赛。我正在使用Entity Framework 6 Code First。我已经尝试了几种注释和流畅映射的组合,但没有任何效果。 我得到“Multiplicity无效......”和“违反多重性约束......”。

我需要使用哪些注释和/或流畅的映射才能使其工作?

1 个答案:

答案 0 :(得分:1)

我必须在我的一个项目中使用自引用表,下面的方法对我有效。 在我的实体类中,我像这样定义了FK

public int? RelatedMatchId{ get; set; }
public virtual Match SourceMatch1 { get; set; }

然后,我将此规范添加到modelbuilder

中的OnModelCreating
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Match>()
        .HasOptional(c => c.SourceMatch1 )
        .WithMany()
        .HasForeignKey(c => c.RelatedMatchId);
}