在 CDS 连接器中使用备用密钥时出错
Error when using Alternate Key in CDS connector
我正在使用 Azure 数据工厂中的 应用程序通用数据服务 连接器将数据加载到 Dynamics 365
在使用实体密钥之前,我已经成功地做到了这一点。看到这个问题:
现在我正在尝试使用备用键将记录更新插入到 account
实体中。 (在这种情况下插入)
在动态中
我在 account
中创建了两个自定义属性字段:
Field name Data Type Field Type Max Length
=======================================================
xyz_srcsystem Single Line Simple 50
xyz_srccode Single Line Simple 50
然后我在 account
上创建了一个密钥,其中包含以下字段:
xyz_alternatekeyaccount
在 ADF 中
然后我在 ADF 中使用 复制数据 activity 将数据从 SQL 视图复制到帐户实体中,使用 CDS 连接器作为目标。
这是我的来源 SQL 声明:
SELECT
CAST(NULL as uniqueidentifier) as accountid,
'ADFTest1' as accountnumber, 'ADF Test 1' as [description],
'nmcdermaid@xyz.com.au' as emailaddress1,
CAST('TST' AS NVARCHAR(50)) as xyz_srcsystem,
CAST('1' AS NVARCHAR(50)) as xyz_srccode
在目标中,在 备用键名 字段中我输入了备用键名:xyz_alternatekeyaccount
我在 运行 管道时得到的错误是
Invalid type for entity id value
一些排除边缘情况的测试:
- 如果我放入一个虚拟备用键,我会得到 无法检索实体 'account' 的备用键 'xyz_alternatekeyaccountx' 的密钥信息。这意味着它正在正确找到备用密钥
- 如果我从连接器中删除备用密钥,它会回到我看到的另一组常见错误
- 当我使用 CDM 连接器将实体拉入 SQL 时,自定义属性到达
NVARCHAR(MAX)
- 我尝试转换为这些数据类型:
NVARCHAR(MAX)
NVARCHAR(50)
VARCHAR(MAX)
VARCHAR(50)
- 如果我使用普通键(而不是备用键),并得到错误的数据类型(除 GUID 之外的任何其他类型),我将得到相同的错误
又见这个 Doco GitHub 我提出:
当我将源 SQL 更改为此时,它起作用了:
SELECT
'ADFTest1' as accountnumber, 'ADF Test 1' as [description],
'nmcdermaid@xyz.com.au' as emailaddress1,
CAST('TST' AS NVARCHAR(50)) as xyz_srcsystem,
CAST('1' AS NVARCHAR(50)) as xyz_srccode
注意:区别在于我没有在源数据集中包含真正的主键。
并不是说如果您想 UPSERT 一条新记录 (INSERT) 并且这不是基于备用键,则您必须包含一个 NULL 主键
我正在使用 Azure 数据工厂中的 应用程序通用数据服务 连接器将数据加载到 Dynamics 365
在使用实体密钥之前,我已经成功地做到了这一点。看到这个问题:
现在我正在尝试使用备用键将记录更新插入到 account
实体中。 (在这种情况下插入)
在动态中
我在 account
中创建了两个自定义属性字段:
Field name Data Type Field Type Max Length
=======================================================
xyz_srcsystem Single Line Simple 50
xyz_srccode Single Line Simple 50
然后我在 account
上创建了一个密钥,其中包含以下字段:
xyz_alternatekeyaccount
在 ADF 中
然后我在 ADF 中使用 复制数据 activity 将数据从 SQL 视图复制到帐户实体中,使用 CDS 连接器作为目标。
这是我的来源 SQL 声明:
SELECT
CAST(NULL as uniqueidentifier) as accountid,
'ADFTest1' as accountnumber, 'ADF Test 1' as [description],
'nmcdermaid@xyz.com.au' as emailaddress1,
CAST('TST' AS NVARCHAR(50)) as xyz_srcsystem,
CAST('1' AS NVARCHAR(50)) as xyz_srccode
在目标中,在 备用键名 字段中我输入了备用键名:xyz_alternatekeyaccount
我在 运行 管道时得到的错误是
Invalid type for entity id value
一些排除边缘情况的测试:
- 如果我放入一个虚拟备用键,我会得到 无法检索实体 'account' 的备用键 'xyz_alternatekeyaccountx' 的密钥信息。这意味着它正在正确找到备用密钥
- 如果我从连接器中删除备用密钥,它会回到我看到的另一组常见错误
- 当我使用 CDM 连接器将实体拉入 SQL 时,自定义属性到达
NVARCHAR(MAX)
- 我尝试转换为这些数据类型:
NVARCHAR(MAX)
NVARCHAR(50)
VARCHAR(MAX)
VARCHAR(50)
- 如果我使用普通键(而不是备用键),并得到错误的数据类型(除 GUID 之外的任何其他类型),我将得到相同的错误
又见这个 Doco GitHub 我提出:
当我将源 SQL 更改为此时,它起作用了:
SELECT
'ADFTest1' as accountnumber, 'ADF Test 1' as [description],
'nmcdermaid@xyz.com.au' as emailaddress1,
CAST('TST' AS NVARCHAR(50)) as xyz_srcsystem,
CAST('1' AS NVARCHAR(50)) as xyz_srccode
注意:区别在于我没有在源数据集中包含真正的主键。
并不是说如果您想 UPSERT 一条新记录 (INSERT) 并且这不是基于备用键,则您必须包含一个 NULL 主键