2011-07-02 30 views
0

創建示例,但'代碼優先'EF4可以在數據庫中存儲私有屬性。使用MVC和EF4存儲模型私有屬性

E.g.假設我們不想讓來電者知道當前BarCount或最大範圍: -

public class Foo 
    {   
     public string FooName { get; set; } 

     // How to ensure this is stored in DB? 
     private int BarCount { get; set; } 

     public void IncBarCount() 
     { 
      BarCount++; 
     } 

     public bool IsBarCountInRange() 
     { 
      return BarCount < 10; 
     } 
    } 
+0

EF與代理類一起工作的方式必須使該屬性公開。我會推薦一種接口方法。 – Buildstarted

回答

1

如果你想隱藏來電信息,很顯然你不指望他,直接修改實體。你可以爲Foo創建一個只包含那些屬性的基類,你希望調用者看到。

public abstract class FooBase 
{ 
    public string FooName { get; set; } 
} 

public class Foo : FooBase 
{ 
    public int BarCount { get; set; } 
} 

然後,您可以將FooBase的實例而不是Foo返回給調用者。但是如果調用者提供了對象的引用,他總是可以用Reflection來訪問隱藏的信息。

另一種可能的選擇是聲明一個接口並讓Foo明確地實現它,儘管我不知道EF-Code First如何對此作出反應。我使用一種方法,從手中創建POCO類和映射片段(SSDL,CSDL和MSL文件),我從中學習到EF可以使用標記爲內部的類型。但我不知道是否也適用於Code-First。

+0

只是澄清 - BarCount不是一個國家機密 - 只是不需要可見 - 所以反思等不是一個擔心。 – Ryan

+0

@Ryan個人而言,我會用顯式接口實現。但我必須用代碼優先的方法來測試。 –