如何在 EF 对象中设置附加字段的值
How to set value of an additional field in EF object
我有一个带有可选用户的 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);
所以我想覆盖 Commenter 的 setter 并执行如下操作:
public virtual UserProfile Commenter{ get; set
{
CommenterName = value.DisplayName;
CommenterId = value.Id
}
}
当我设置它时,我发现定义 setter 而不定义 getter 是无效的。我想我可以定义 getter,这意味着通过 Id 查找用户,但这似乎只是重新实现已经有效的东西。有没有正确或更好的方法来做到这一点?
I guess I could define the getter, which would mean looking up the user by Id
不完全是。
您当前的实施未能设置用户配置文件。您可以自己实现 getter 和 setter 的其余部分(您现在拥有的是 getter 的自动 属性 和 [= 的手动实现22=] 不设置任何支持值)
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;
我有一个带有可选用户的 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);
所以我想覆盖 Commenter 的 setter 并执行如下操作:
public virtual UserProfile Commenter{ get; set
{
CommenterName = value.DisplayName;
CommenterId = value.Id
}
}
当我设置它时,我发现定义 setter 而不定义 getter 是无效的。我想我可以定义 getter,这意味着通过 Id 查找用户,但这似乎只是重新实现已经有效的东西。有没有正确或更好的方法来做到这一点?
I guess I could define the getter, which would mean looking up the user by Id
不完全是。
您当前的实施未能设置用户配置文件。您可以自己实现 getter 和 setter 的其余部分(您现在拥有的是 getter 的自动 属性 和 [= 的手动实现22=] 不设置任何支持值)
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;