准备:在 OpenSuse11 下搭建了 MONO2 环境 ,更新系统,把能打的补丁全打上,这样可以启用 debugger 。
1. windows 上的 System.Data.Sqlite 不能正常加载。去除,添加 mono.data.sqlite .
2. Mono 没有完全实现 System.Data.dll 中的所有类。新建两个类:
Code
// OleDbFacroty.cs created with MonoDevelop
// User: xh at 下8:02 08-12-29
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Security;
using System.Security.Permissions;
namespace NBear.Data.Mono
{
public class OleDbFactory : System.Data.Common.DbProviderFactory
{
// Fields
public static readonly OleDbFactory Instance = new OleDbFactory();
// Methods
private OleDbFactory()
{
}
public override DbCommand CreateCommand()
{
return new OleDbCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OleDbCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OleDbConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
throw new Exception("MONO 不能实现 OleDbFactory.CreateConnectionStringBuilder !!!") ;
//return new OleDbConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OleDbDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OleDbParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OleDbPermission(state) ;
}
}
}
// OleDbFacroty.cs created with MonoDevelop
// User: xh at 下8:02 08-12-29
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Security;
using System.Security.Permissions;
namespace NBear.Data.Mono
{
public class OleDbFactory : System.Data.Common.DbProviderFactory
{
// Fields
public static readonly OleDbFactory Instance = new OleDbFactory();
// Methods
private OleDbFactory()
{
}
public override DbCommand CreateCommand()
{
return new OleDbCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OleDbCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OleDbConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
throw new Exception("MONO 不能实现 OleDbFactory.CreateConnectionStringBuilder !!!") ;
//return new OleDbConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OleDbDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OleDbParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OleDbPermission(state) ;
}
}
}
Code
// OracleClientbFacroty.cs created with MonoDevelop
// User: xh at 下8:02 08-12-29
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Security;
using System.Security.Permissions;
using System.Data.OracleClient;
namespace NBear.Data.Mono
{
public class OracleClientFactory : System.Data.Common.DbProviderFactory
{
// Fields
public static readonly OracleClientFactory Instance = new OracleClientFactory();
// Methods
private OracleClientFactory()
{
}
public override DbCommand CreateCommand()
{
return new OracleCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OracleCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OracleConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
throw new Exception("MONO 不能实现 OracleClientFactory.CreateConnectionStringBuilder !!!") ;
//return new OracleConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OracleDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OracleParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OraclePermission(state);
}
}
}
// OracleClientbFacroty.cs created with MonoDevelop
// User: xh at 下8:02 08-12-29
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Security;
using System.Security.Permissions;
using System.Data.OracleClient;
namespace NBear.Data.Mono
{
public class OracleClientFactory : System.Data.Common.DbProviderFactory
{
// Fields
public static readonly OracleClientFactory Instance = new OracleClientFactory();
// Methods
private OracleClientFactory()
{
}
public override DbCommand CreateCommand()
{
return new OracleCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OracleCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OracleConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
throw new Exception("MONO 不能实现 OracleClientFactory.CreateConnectionStringBuilder !!!") ;
//return new OracleConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OracleDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OracleParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OraclePermission(state);
}
}
}
3。在找不到 ProviderFactory.Instance 的地方,添加 using NBear.Data.Mono ;
4。基本上就可以了。App.Config 不能正常配置,只能硬编码 Gateway 。
Code
Gateway g = DbConfig.TheOne;
Dict d = g.Find<Dict>(Dict._.ID == 3 ) ;
Console.WriteLine( d.Value ) ;
Gateway g = DbConfig.TheOne;
Dict d = g.Find<Dict>(Dict._.ID == 3 ) ;
Console.WriteLine( d.Value ) ;