繁体   English   中英

如何使用实体框架连接到 Azure Synapse 数据库?

[英]How to Connect to Azure Synapse Database using Entity Framework?

我们的项目中有 Entity Framework DB First 架构,我们需要从关系 Sql 服务器数据库连接到 Azure 突触数据库以进行迁移。 由于 Azure Synpase 是 PAAS 而不是关系数据库,我们无法使用 EF edmx 将数据库中的 map 数据导入到我们的模型中。 正如我们所知,EF 是一个 ORM 即 object 关系映射器,它将关系从数据库映射到对象。

错误:

由于以下异常,无法生成 model:
'System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时出错。 有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 'columnproperty' 不是可识别的内置 function 名称。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection,Action`1 wrapCloseInAction)

从 Azure 突触数据库创建 edmx 时出现以下错误

错误:

由于以下异常,无法生成 model:
'System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时出错。 有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 'columnproperty' 不是可识别的内置 function 名称。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection,Action`1 wrapCloseInAction)

我们需要使用任何方式使用实体框架连接到 Azure 突触数据库,而不仅仅是数据库优先方法,它可以是任何方式。

对于这个问题,我们尝试了 EF 数据库优先方法的多个选项,但这里 EF 代码优先方法解决了我们连接到 Azure 突触的问题。 使用现有的 edmx,您无法连接到 Azure 突触。

您需要按照以下步骤解决问题。

  1. 创建新的 Model 类,它们存在于您的 edmx 中。
  2. 在模型文件夹中创建新的 DBContext class。
  3. 新建 controller
  4. 在 controller get 方法中,您可以使用 C# lambda 表达式从新的 DBset 中查询数据,如下所示。
IQueryable<test_customer> result = db.customerDbset 
            .Where(n => n.job.Equals(job))
            .ToList().AsQueryable();`

新增controller:

Select 新的 model 和新的 Dbcontext class 在以下字段中:

根据 azure 数据库表,在 DbContext class 中进行以下更改以进行新映射:

3个

OnModelCreating方法中,您需要将新表从 Azure 突触映射到我们的新表 model class,如上图所示。 并在 Dbcontext class 中添加如下Dbcontext例如:

public DbSet<test_customer> customerDbset { get; set; }

完成所有这些后,从现有的 edmx 文件中删除所有引用,并从您的项目中卸载该 edmx。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM