EntityFramework

核能气质少年 提交于 2021-01-09 02:12:18

使用 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. 还在找坑

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!