我知道這是一個老問題,但我也喜歡碰到過這樣的信息時,我開始了。 在我們的例子中,我們的多層解決方案中有一個win32 Delphi客戶端,我使用了模板(使用C#)來生成.Net中的DTO類以及win32對應模塊。
這允許我們使用在很大程度上自動生成的Delphi代碼封裝在客戶端上的CRUD功能:
procedure Delete;
class function DeleteDto(const _dESPATCHID: integer) : boolean;
class function GetNextID : integer;
class function Get(const _dESPATCHID: integer) : TDtoDESPATCH; overload;
class function Collection(const __filterXml: string): TList<TDtoDESPATCH>;
function Load: boolean; overload;
function Populate(_primaryDict : TDictionary<string, Variant>) : boolean;
function Save : boolean; overload;
變化從客戶跟蹤,也可以自動的,所以每個屬性setter將迎來更改的屬性,以確保只更改更改的屬性。 例如:
procedure TDtoDESPATCH.SetSCT_STATUS(const value : string);
begin
if (self.IsLoaded) and (inherited SCT_STATUS <> value) then
begin
TrackChange('SCT_STATUS');
self.Modified:= True;
end;
inherited SCT_STATUS := value;
end;
在服務器端,另一個模板負責所有CRUD操作中這也是公開爲ASMX Web服務自動生成的WCF服務。接口,WCF方法和所有註釋都是從模板生成的。
// convert to entity
var _entity = _dto.ToEntity();
if(exists)
{
Global.LogActivity(string.Format("{0} - profile {1}, updating DESPATCH: {2}", racID, profile, _dto.ChangedProperties));
// Attach the entity to the db
db.DESPATCHes.Attach(_entity);
// Change tracking
ChangeTracking<DESPATCH>(_dto.ModifiedProperties, db, _entity);
}
在WIN32有可能成爲解決方案的一部分的情況下,手動編碼這一切都將是一個(差)的噩夢。
你如何確定它是否「需要」或允許的最大字符串長度是多少?從EntityType? – ILovePaperTowels 2011-12-20 23:35:23
看我的編輯一些示例代碼。我們從WritePrimitiveTypeProperty方法中的EdmProperty對象讀取IsNullable。我們還有一些額外的幫助方法來確定一個字符串字段是否具有最大長度(上面代碼中的HasMaxLength和MaxLength)。 – 2011-12-20 23:42:00
厚顏無恥而爲死靈道歉,但你不會有那些幫手功能在任何地方在線上網? :) – 2017-12-19 10:58:02