如何在 EF 对象中设置其他字段的值

本文关键字:其他 字段 设置 EF 对象 | 更新日期: 2023-09-27 18:34:40

>我有一个带有可选用户的 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 的情况下定义一个二传手是无效的。我想我可以定义 getter,这意味着通过 Id 查找用户,但这似乎我只是在重新实现已经有效的东西。有没有正确或更好的方法来做到这一点?

如何在 EF 对象中设置其他字段的值

我想我可以定义 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 条件运算符编写倒数第二行。

CommenterName = value?.DisplayName;