Greetings all - I haven't posted here in ages I am entirely new to .Net having been working in it for a week at most so please go easy and be detailed as possible
I have the following PONO:
Private intTrackingNumber AsIntegerPrivate intDateReceived AsIntegerPrivate strManufacturer AsStringPublicProperty TrackingNumber() AsIntegerGetReturn intTrackingNumber
intTrackingNumber = value
EndSetEndPropertyPublicProperty DateReceived() AsStringGet' TODO: Convert timestamp to formatted date
' TODO: Convert formatted date to timestamp
intDateReceived = value
The issue I am faced with is how to store date/time as a timestamp (integer) but provide public properties which format/convert accordingly.
I suppose I could provide a an additional getter()/setter() but ideally I wonder if EF has a way of circumventing this "convention"?
Additionally - I am also curious as to whether it's possible to map properties to columns which are not labeled correctly?
Basically if I were working in a existing database (EF automatically builds my PONO with properties named after table fields) I wish to name the fields something more meaningful; some fields for example might be awkward abbreviations but in the object model I want something more English friendly?
I seem to recall being able to do this with Hibernate in java (actually it's PHP port) but never the less does EF support such a feature? Seems obvious that this would be useful in day to day development???
I just found some articles that explain how to change the mapping for tables so I imagine columns are just around the corner.
When I say timestamp I mean a unix timestamp which can easily be converted to date AND/OR time - not sure what MSDN is getting at?!?
In the database I wish to store the date "10/10/2013" as 1381381200 but convert to a human friendly date within the PONO.
My entity objects are high level abstractions but I still prefer to store the time in a numeric format - how does EF solve/address this type mis-match? This is/was the impetus behind OR/M frameworks ain't it?
Ah, OK - "timestamp" in SQL is something totally different.
I don't think there's any built-in way to perform this sort of conversion in the mapping layer. The simplest approach is probably to add a calculated property for the date, decorated with the NotMapped attribute:
EF will see a .NET type of DateTime in your POCO and use the native DateTime datatype specified by the underlying data provider. It will not convert a DateTime to a "serial number" as you want because the serial number can be based on any arbitrary epoch. For example, UNIX uses 1/1/1970 00:00:00AM whereas .NET uses 1/1/0001 00:00:00AM. So, to each system, the datetime serial number will mean something different.
Why even do this?? Why not just let the underlying database handle the storage and return the correct datetime without your code having to worry about conversion?