如何在EF对象中设置附加字段的值

时间:2016-02-15 23:59:01

标签: c# entity-framework ef-fluent-api

我有一个带有可选用户的Comment对象。在设置用户时,我想设置一个带有用户名的附加字段,这样如果稍后删除该用户,则该评论将被人识别。

public class Comment
{

    public int Id { get; set; }
    public int? CommenterId { get; set; }
    public string CommenterName { get; set; }
    public string Text { get; set; }
    public virtual UserProfile Commenter {  get; set; }
}

Commenter和CommenterId使用FluentAPI进行映射:

HasOptional(t => t.Commenter)
    .WithMany()
    .HasForeignKey(t => t.CommenterId);

所以我想覆盖评论者的设定者并做这样的事情:

public virtual UserProfile Commenter{  get; set 
    {
        CommenterName = value.DisplayName;
        CommenterId = value.Id
    } 
}

当我设置它时,我发现在没有定义getter的情况下定义setter是无效的。我想我可以定义getter,这意味着通过Id查找用户,但这似乎我只是重新实现已经有效的东西。是否有正确或更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

  

我想我可以定义getter,这意味着按Id

查找用户

不完全是。

您当前的实施无法设置用户个人资料。你可以自己实现getter和其余的setter(你现在拥有的是getter的自动属性,以及没有设置任何后备值的setter的手动实现)

private UserProfile commenter;
public virtual UserProfile Commenter
{   
    get
    {
        return commenter;
    }
    set 
    {
        CommenterName = (value == null ? string.Empty : value.DisplayName);
        commenter = value;
    } 
}

请注意,如果您正在使用C#6,则可以使用时髦的新Null Conditional operator来编写倒数第二行。

CommenterName = value?.DisplayName;