2010-11-19 108 views
1

嗨,c#DAL類和業務層類

你能告訴我這是否可能嗎?

public class Person 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

填充一流的呼叫說,在一個名爲DataAccessLayer不同的組件正在做的人是在這樣調用實體代碼的人口的組件(這樣的人,它是人口密集的地方不在相同的程序集)

//下面的代碼將從數據讀取器等讀取,但剛剛這樣做//易於解釋。

Person p=new Person(); 
p.Name="tom"; 
p.id = 10; 

人類現在可以被其他系統訪問,以允許他們能夠訪問人員。我想要的是防止其他系統能夠更改ID。能夠閱讀但不能寫。我是否需要創建另一個類來允許這個類,並且只將這個類暴露給另一個系統(即一個業務對象)(即ORM)?

我知道很多人會說只是使ID只讀。即

public int ID { get; } 

,但如果我這樣做的話,我可以不填充從類似於上面的代碼中的ID,因爲在我的DataAccessLayer我將無法設置ID,因爲它是隻讀的。

感謝 尼爾

+0

爲什麼不保留只讀屬性,並簡單地通過構造函數設置備份變量的值? – Pierreten 2010-11-19 08:56:24

回答

4

您可以創建一個internal構造的對象,你可以通過ID進入,然後設置實體DLL的標誌,讓其他DLL(DataAccessLayer),以能夠看到和使用內部調用此DLL。 (InternalsVisibleTo屬性)

+0

是的,這比我的解決方案有更好的封裝(包含組件之外的構造函數沒有可見性) – Pierreten 2010-11-19 08:57:45

+0

非常感謝。好的解決方案 – Somedeveloper 2010-11-19 09:34:33

0

目光投向ORM工具將分配實體的ID爲您和您的ID屬性看:

public class MyEntity 
{ 
    public virtual int ID { get; protected set; } 

    // other properties 
} 

,如果你選擇這種方式,你不必擔心指定屬性和類型的鑄造。