2016-02-15 28 views
0

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

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; } 
} 

注释器和CommenterId映射像这样与FluentAPI:

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

所以我想重写批评家的setter和做这样的事情:

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

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

回答

1

我想我可以定义getter方法,将意味着由标识

查找用户

不完全是。

您当前的实施无法设置用户配置文件。您可以实现getter和二传手自己(你现在有什么是自动属性为吸气和手动实现,不设置任何后盾值二传手)

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; 
+0

我明白了 - 所以一个汽车财产保持私人领域没有我见过它。现在有道理。并感谢无条件的操作员提示! –

+0

是的,这是正确的...自动属性是语法糖,为您的财产创造支持领域。 –

相关问题