使用 EntityFramework 连接 oracle 和数据库
使用 CodeFirst 方式
首先 在 Nuget 上下载
目前可以直接使用最新的版本
然后 按照平常的方式创建 DbContext
public class MyOracleDbContext : DbContext
{
public DbSet<SysAdmin> SysAdmin { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//这里需要指定schema,需要指定用户名, 这里似乎需要大写
modelBuilder.HasDefaultSchema("ORAL");
base.OnModelCreating(modelBuilder);
}
}
然后写连接字符串
<connectionStrings>
<add name="MyOracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=连结协议,写TCP)(HOST=IP地址)(PORT=端口))(CONNECT_DATA=(SERVER=数据库名)(SERVICE_NAME=服务名)));User ID=用户名;Password=密码;" />
</connectionStrings>
然后使用 Add-Migration 来添加迁移脚本
使用 Update-Database 来更新数据库
其中, 如果出现
值不能为 null。
参数名: seqOwner
这样的错误的话, 很有可能是没有加 Schema
添加一个试试
映射及参考地址:
http://www.cnblogs.com/xdlysk/p/5169140.html
其中可能有几个坑:
1. Ef 的 int 类型的 Id 映射到 Oracle 并不会自动增长, 具体的解决办法暂无
2. Ef 的 Guid 类型 映射到 Oracle 是 RAW 类型, 如果存了值得话 可能会出现乱码, 但是目前看来暂未影响使用
3. Ef 的 string 映射到 Oracle 是 NCOLB 类型, 在 .NET 中不能按照正常的 String 类型去读取
解决方案是, 使用 MaxLength(500) 规定在500一下, 就自动变成了 NVARCHAR2 不知道为什么
4. 进行数据迁移的话, 需要制定 Schema, 这个 Schema 对应的似乎是用户名, 至今没搞清楚
5. 还在找坑
来源:oschina
链接:https://my.oschina.net/u/4358837/blog/3864315