2016-02-15 58 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

是的,這是正確的...自動屬性是語法糖,爲您的財產創造支持領域。 –

相關問題