2012-01-04 45 views
0

我的表格有'Operation_Time','Create_User'等常用列。 而不是寫許多類型的我的實體對象的更新代碼 - 即個人,地址等 - 我想寫一個靜態方法,將採取實體對象,並將更新其目標字段。使用數據集,DataTable非常簡單。如何更新不同類型的EntityObject的通用屬性?

function updateEntityObjectsCommonFields(EntityObject obj) 
{ /// just i guess 
    obj.Fields["Create_Usr"] = Session.Usr; 
    obj.Fields["Operation_Time"] = DateTime.Now; 
    obj.Fields["Last_Op_Usr"] = Session.Usr; 
} 

/// usage 
updateEntityObjectsCommonFields(Person) ; 
updateEntityObjectsCommonFields(Adres)  
updateEntityObjectsCommonFields(Application) ; ; 

任何解決方案?

在此先感謝?

回答

0

讓您的實體實現一個通用接口,該接口指定您需要的字段並根據此接口編寫更新函數。

public interface IAuditEntity 
{ 
    User CreateUsr { get; set;} 
    DateTime OperationTime { get; set;} 
    User LastOperationUser { get; set;} 
} 

public void UpdateEntityObjectsCommonFields(IAuditEntityobj) 
{ /// just i guess 
    obj.CreateUsr = Session.Usr; 
    obj.OperationTime = DateTime.Now; 
    obj.LastOperationUser = Session.Usr; 
} 

你可以讓他們通過修改實現接口的T4 template(如果它適用於所有的實體),或者通過讓特定的實體實施中partial class文件的接口。

+0

謝謝Wouter。我會嘗試解決方案,但當我更新實體模型時會發生什麼?它會覆蓋我所有的界面關係嗎?任何解決方案? – Yaya 2012-01-04 12:19:15

+0

如果你要在Visual Studio生成的文件中編寫代碼,那麼它將被覆蓋。這就是爲什麼我提到了查看T4(所以你可以改變代碼的生成非常簡單,並添加你的接口),或者通過使用partial class(=在另一個代碼文件中擴展生成的類,以便在重新生成代碼時不會被覆蓋) – 2012-01-04 12:31:38

+0

謝謝Wouter。問題解決了。 – Yaya 2012-01-04 12:39:26

相關問題