将EF Code First中的外键设置为现有SQL Server数据库

时间:2016-03-16 19:02:24

标签: c# entity-framework

我有一个评论类,其中包含评论作者/最后一个修改评论的人的用户对象。

public class Comment 
{
    public int CommentId { get; set; }
    public int SignOffId { get; set; }
    public string CommentText { get; set; }
    public int LastModifiedByUserId { get; set; }
    public DateTime LastModifiedOnDate { get; set; }
    public virtual User LastModifiedByUser { get; set; }
}

我正在尝试在CommentMap类中设置关系,但如果不在Comment类中添加虚拟User属性,我无法弄清楚如何执行此操作。但我不希望这样,因为User类的业务逻辑没有Comment对象。

LastModifiedByUserId是指向Comments表的User表中的外键。

这是CommentMap ctor。

    public CommentMap() {
        // Primary Key
        this.HasKey(t => t.CommentId);

        // Properties
        this.Property(t => t.CommentText)
            .IsRequired()
            .IsMaxLength();

        this.Property(t => t.LastModifiedByUserId)
            .IsRequired();

        this.Property(t => t.LastModifiedOnDate)
            .IsRequired();

        // Table & Column Mappings
        this.ToTable("Comments");
        this.Property(t => t.CommentId).HasColumnName("CommentId");
        this.Property(t => t.SignOffId).HasColumnName("SignOffId");
        this.Property(t => t.CommentText).HasColumnName("CommentText");
        this.Property(t => t.LastModifiedByUserId).HasColumnName("LastModifiedByUserId");
        this.Property(t => t.LastModifiedOnDate).HasColumnName("LastModifiedOnDate");

        // Relationships
        this.HasRequired(c => c.LastModifiedByUser)
            .WithRequiredDependent(u => u.UserId) //This doesn't work
            .HasForeignKey(c => c.LastModifiedByUserId);
    }

它想要WithRequiredDependent行中的实体,而不是整数。这完全是建立这种关系的错误方式吗?当我从数据库中提取注释时,我希望它也为上次修改注释的人抓取User对象。

1 个答案:

答案 0 :(得分:1)

我不认为用户只能修改一条评论。因为这就是你的模特所表达的。组合HasRequired - WithRequiredDependent表达1:1的关系。它应该是1:n,如下所示:

this.HasRequired(c => c.LastModifiedByUser)
        .WithMany()
        .HasForeignKey(c => c.LastModifiedByUserId);