This question is locked. New answers and comments are not allowed.
I'm creating an n-Tier ASP.NET application and I will be mapping DataObjects entities to Business Objects classes to transport data up and down the layers of the application. So no Data Objects entities will leave the Data Objects project. This way I don't need to include the OpenAccess assemblies in all projects.
All database tables include a "RowVersion" column of type "timestamp" for concurrency.
I've created some tests just to see if I can query the database from a Unit Test project and I'm getting the following exception:
------ Test started: Assembly: WebFlow.UnitTests.dll ------ Test 'WebFlow.UnitTests.DataObjectsTests.DataObjectsFixture.Get_All_SiteMap_Items' failed: Telerik.OpenAccess.Exceptions.MetadataException : Field 'rowVersion' of class 'WebFlow.DataObjects.ARFiscalData' is not of type 'System.Int64' required by driver 'mssql'. --> WebFlowEntities/namespace[WebFlow.DataObjects]/class[ARFiscalData]/db-optimistic-locking="backend"/field-name="rowVersion" at Telerik.OpenAccess.RT.ExceptionWrapper.Throw() at OpenAccessRuntime.storagemanager.StorageManagerFactoryBuilder.createSmfForURL() at OpenAccessRuntime.storagemanager.StorageManagerFactoryBuilder.createStorageManagerFactory() at OpenAccessRuntime.DataObjects.PersistenceManagerFactoryImp.createStorageManagerFactory() at OpenAccessRuntime.DataObjects.PersistenceManagerFactoryBase.init() at OpenAccessRuntime.DataObjects.PersistenceManagerFactoryImp.init() at OpenAccessRuntime.DataObjects.PersistenceManagerFactoryImp..ctor(PropertySet properties, Object classloader) at OpenAccessRuntime.DataObjects.BootstrapPMF.getPersistenceManagerFactory(PropertySet props) at Telerik.OpenAccess.RT.Helper.getPersistenceManagerFactory(PropertySet props) at Telerik.OpenAccess.RT.DatabaseAdapter.AssertPersistenceManagerFactory(String usr, String password, Boolean open) at Telerik.OpenAccess.RT.DatabaseAdapter.GetObjectScope(TransactionProvider provider) at Telerik.OpenAccess.Database.GetObjectScope(TransactionProvider provider) at Telerik.OpenAccess.OpenAccessContextBase.GetScope() at Telerik.OpenAccess.OpenAccessContext.GetAll[T]() OpenAccess\WebFlowEntities.cs(148,0): at WebFlow.DataObjects.WebFlowEntities.get_SiteMaps() SQLServer\SiteMapBaseDao.cs(36,0): at WebFlow.DataObjects.SQLServer.SiteMapBaseDao.GetAll() DataObjectsTests\DataObjectsFixture.cs(18,0): at WebFlow.UnitTests.DataObjectsTests.DataObjectsFixture.Get_All_SiteMap_Items() 0 passed, 1 failed, 0 skipped, took 0.50 seconds (NUnit 2.5.5). The weird thing with this exception is that it is faulting on "ARFiscalData" entity, not the "SiteMap" entity.
Here's an example of a Business Objects class, notice the "RowVersion" property:
public class SiteMap { #region Properties public string NodeID { get; set; } public string ParentID { get; set; } public string Title { get; set; } public string Icon { get; set; } public string URL { get; set; } public string ScreenID { get; set; } public bool IsExpanded { get; set; } public string RowVersion { get; set; } public List<RolesInSiteMap> RolesInSiteMapList { get; set; } #endregion }Here's an example of the corresponding OpenAccess generated entity. The "RowVersion" property looks correct, except the property data types are "long" instead of "Int64", even though the attribute contains "Int64".
namespace eFlow.DataObjects { [Table("SiteMap")] [ConcurrencyControl(OptimisticConcurrencyControlStrategy.Backend)] public partial class SiteMap { private string nodeID; [Column("NodeID", OpenAccessType = OpenAccessType.Varchar, IsPrimaryKey = true, Length = 10, SqlType = "varchar")] [Storage("nodeID")] public virtual string NodeID { get { return this.nodeID; } set { this.nodeID = value; } } private string parentID; [Column("ParentID", OpenAccessType = OpenAccessType.Varchar, IsNullable = true, Length = 10, SqlType = "varchar")] [Storage("parentID")] public virtual string ParentID { get { return this.parentID; } set { this.parentID = value; } } private string title; [Column("Title", OpenAccessType = OpenAccessType.Varchar, SqlType = "nvarchar")] [Storage("title")] public virtual string Title { get { return this.title; } set { this.title = value; } } private string icon; [Column("Icon", OpenAccessType = OpenAccessType.Varchar, IsNullable = true, Length = 512, SqlType = "varchar")] [Storage("icon")] public virtual string Icon { get { return this.icon; } set { this.icon = value; } } private string uRL; [Column("URL", OpenAccessType = OpenAccessType.Varchar, IsNullable = true, Length = 512, SqlType = "varchar")] [Storage("uRL")] public virtual string URL { get { return this.uRL; } set { this.uRL = value; } } private string screenID; [Column("ScreenID", OpenAccessType = OpenAccessType.Varchar, IsNullable = true, Length = 8, SqlType = "varchar")] [Storage("screenID")] public virtual string ScreenID { get { return this.screenID; } set { this.screenID = value; } } private bool isExpanded; [Column("IsExpanded", OpenAccessType = OpenAccessType.Bit, SqlType = "bit")] [Storage("isExpanded")] public virtual bool IsExpanded { get { return this.isExpanded; } set { this.isExpanded = value; } } private long? rowVersion; [Column("RowVersion", OpenAccessType = OpenAccessType.Int64, IsNullable = true, IsBackendCalculated = true, IsVersion = true, SqlType = "timestamp")] [Storage("rowVersion")] public virtual long? RowVersion { get { return this.rowVersion; } set { this.rowVersion = value; } } private IList<RolesInSiteMap> rolesInSiteMaps = new List<RolesInSiteMap>(); [Collection(InverseProperty = "SiteMap")] [Storage("rolesInSiteMaps")] public virtual IList<RolesInSiteMap> RolesInSiteMaps { get { return this.rolesInSiteMaps; } } } }Here is my unit test:
[TestMethod] public void TestMethod1() { // Arrange ISiteMapDao dao = new SQLServerSiteMapDao(); // Act var sitemaps = dao.GetAll(); // Assert Assert.IsNotNull(sitemaps); }Here is the GetAll method from the repository:
public List<eFlow.BusinessObjects.SiteMap> GetAll() { using (var context = DataObjectFactory.CreateContext()) { List<eFlow.BusinessObjects.SiteMap> query = context.SiteMaps.Select(o => SiteMapMapper.ToBusinessObject(o)).ToList(); return query; } }Here are my development specs:
- VS 2010 Professional
- SQL Server 2008 R2
- OpenAccess v2010.2.714.1
- NUnit 2.5.5
The data entities was creating using the OpenAccess ORM Visual Designer.
Let me know if you need anything else. Any help would be appreciated.
Thanks.