|
我们知道XPO实体类定义好后, XPO可以自动生成数据库表, 但是表名默认是和类名一样的,区分大小写, 这在Oracle中,如需要从后台维护数据时书写SQL会很不方便.
比如:- public class MyTable : XPObject
- {
- ......
- }
复制代码 这样自动生成的表名为 MyTable, 在 SqlServer 中, 表名我们可以不区分大小写的使用, 但在 Oracle 不行, 必须用双引号括起来区分大小写.
我们可以为该类添加一个属性指定数据库中的表名- [Persistent("MY_TABLE")]
- public class MyTable : XPObject
- {
- ......
- }
复制代码 这样生成的表名即为 MY_TABLE.
现在我们更改XPO自动生成的对象名称的规则, 就是继承已有的 XpoProvider, 然后 覆写其中的 ComposeSafeTableName 方法. 以下代码将对象名称转换为大写,且在每一个拼写单词之间增加一个下划线, 如名称为EmployeeNo, 则自动生成EMPLOYEE_NO的名称.- public class MyODPConnectionProvider : ODPConnectionProvider
- {
- public const string MyODPProviderTypeString = "MyODP";
- public static IDataStore CreateMyODPProviderFromString
- (string connectionString, AutoCreateOption autoCreateOption,
- out IDisposable[] objectsToDisposeOnDisconnect)
- {
- IDbConnection connection = ODPConnectionProvider.CreateConnection(connectionString);
- objectsToDisposeOnDisconnect = new IDisposable[] { connection };
- return new MyODPConnectionProvider(connection, autoCreateOption);
- }
- static MyODPConnectionProvider()
- {
- RegisterDataStoreProvider(MyODPProviderTypeString,
- new DataStoreCreationFromStringDelegate(CreateMyODPProviderFromString));
- }
- public new static void Register() { }
- public MyODPConnectionProvider(IDbConnection connection, AutoCreateOption autoCreateOption)
- : base(connection, autoCreateOption)
- {
- }
- private string MyFormatName(string name)
- {
- System.Text.RegularExpressions.Regex r;
- r = new Regex("([a-z0-9])([A-Z])", RegexOptions.Singleline);
- return r.Replace(name, "$1_$2");
- }
- public override string ComposeSafeTableName(string tableName)
- {
- return base.ComposeSafeTableName(MyFormatName(tableName)).ToUpper();
- }
- }
复制代码 使用的时候先注册该 Provider, 之后就可以使用了.- MyODPConnectionProvider.Register();
- string connectionString = "XpoProvider=MyODP;DATA SOURCE=//127.0.0.1/ORCL;USER ID=test;PASSWORD=test;";
- XpoDefault.ConnectionString = connectionString;
- MyTable myTable = new MyTable();
- myTable.Name = "Nyfor";
- myTable.BirthDate = DateTime.Now.AddYears(-30).Date;
- myTable.Save();
复制代码- public class MyTable : XPObject
- {
- public MyTable()
- : base()
- {
- }
- public MyTable(Session session)
- : base(session)
- {
- }
- public string Name { get; set; }
- public DateTime BirthDate { get; set; }
- }
复制代码 |
评分
-
查看全部评分
|