实体框架映射组合键和级联删除

时间:2016-04-25 19:55:32

标签: c# entity-framework ef-code-first data-annotations ef-fluent-api

我尝试使用代码优先方法实现Entity Framework。

所需的数据库

我有一个非常简单的数据模型。它看起来如下

User
{
    int UserId
}

Vote
{
    int VoterId
    int VoteeId
    double Value
}

所需行为

我想要的是让VoterId和VoteeId成为一个复合键,每个键都引用User表的UserId。

此外,我希望删除从用户级别投票到投票。因此,如果用户被删除并且他/她是投票人或投票人,则必须删除相应的投票。

当前域

目前我有以下域名设置:

public class User
{
    public int UserId {get;set;}
    public ICollection<Vote> VotesForMe {get;set;}
    public ICollection<Vote> VotesByMe {get;set;}
}

public class Vote
{
    [Key, Column(Order = 0)]
    public int VoterId { get; protected set; }

    [Key, Column(Order = 1)]
    public int VoteeId { get; protected set; }

    [ForeignKey("VoterId")]
    [Required]
    public User Voter {get;set;}

    [ForeignKey("VoteeId")]
    [Required]
    public User Votee {get;set;}
}

我还尝试了以下流畅的配置:

modelBuilder.Entity<Domain.User>()
    .HasMany<Domain.Vote>(s => s.VotesForMe)
    .WithRequired(s => s.Votee);

modelBuilder.Entity<Domain.User>()
    .HasMany<Domain.Vote>(s => s.VotesByMe)
    .WithRequired(s => s.Voter);

问题

使用此特定设计和/或fluent配置会产生此错误:

&#34;引入外键约束......可能导致循环或多个路径&#34;

这是因为从用户到投票有两条级联路径吗?

我真的希望通过数据注释进行此设置。但是流畅的API也很好。但我无法弄清楚如何实现这一目标。

任何帮助都将不胜感激。

相关问题

Entity framework multiple composite keys, cascade on delete

0 个答案:

没有答案