更新中的实体状态?
EntityState in update?
在 CFE 中更新记录时正确的方法是什么?
我们正在使用基于this link的webapi控制器,客户端是由于AngularJS开发的。
我在更新已存在的记录时遇到问题,我的代码因 CodeFluentDuplicateException 而失败。
我读到 here 不应手动更改 EntityState。当我想用客户端更改更新服务器版本时,我应该考虑:
- 获取服务器版本然后应用客户端所做的更改?
- 要求客户端版本保存()?
- 还有其他方法吗?
感谢您的回答,
CodeFluentDuplicateException
表示您要插入一条已存在于数据库中的记录。当存储过程执行 INSERT
语句而不是 UPDATE
时,会发生这种情况。
CodeFluent 实体不使用 EntityState
选择是否必须在数据库中创建或更新实体。根据您的型号,它使用 RowVersion
属性(如果 null
则插入;否则更新)。如果无法选择,存储过程将执行 UPDATE,当没有行更新时,它会插入该行。例如:
CREATE PROCEDURE [dbo].[Role_Save]
(
@Role_Id [uniqueidentifier],
@Role_Name [nvarchar] (256),
)
AS
SET NOCOUNT ON
IF(@_rowVersion IS NOT NULL)
BEGIN
UPDATE [Role] SET
[Role].[Role_Name] = @Role_Name
WHERE (([Role].[Role_Id] = @Role_Id) AND ([Role].[_rowVersion] = @_rowVersion))
END
ELSE
BEGIN
INSERT INTO [Role] (
[Role].[Role_Id],
[Role].[Role_Name])
VALUES (
@Role_Id,
@Role_Name)
END
因此,在您的情况下,我会检查生成的存储过程的代码,以了解为什么它会尝试插入记录而不是更新记录。
事实上,如果需要,您可以手动更改 EntityState
,但这样做的理由不多。
在 CFE 中更新记录时正确的方法是什么?
我们正在使用基于this link的webapi控制器,客户端是由于AngularJS开发的。 我在更新已存在的记录时遇到问题,我的代码因 CodeFluentDuplicateException 而失败。
我读到 here 不应手动更改 EntityState。当我想用客户端更改更新服务器版本时,我应该考虑:
- 获取服务器版本然后应用客户端所做的更改?
- 要求客户端版本保存()?
- 还有其他方法吗?
感谢您的回答,
CodeFluentDuplicateException
表示您要插入一条已存在于数据库中的记录。当存储过程执行 INSERT
语句而不是 UPDATE
时,会发生这种情况。
CodeFluent 实体不使用 EntityState
选择是否必须在数据库中创建或更新实体。根据您的型号,它使用 RowVersion
属性(如果 null
则插入;否则更新)。如果无法选择,存储过程将执行 UPDATE,当没有行更新时,它会插入该行。例如:
CREATE PROCEDURE [dbo].[Role_Save]
(
@Role_Id [uniqueidentifier],
@Role_Name [nvarchar] (256),
)
AS
SET NOCOUNT ON
IF(@_rowVersion IS NOT NULL)
BEGIN
UPDATE [Role] SET
[Role].[Role_Name] = @Role_Name
WHERE (([Role].[Role_Id] = @Role_Id) AND ([Role].[_rowVersion] = @_rowVersion))
END
ELSE
BEGIN
INSERT INTO [Role] (
[Role].[Role_Id],
[Role].[Role_Name])
VALUES (
@Role_Id,
@Role_Name)
END
因此,在您的情况下,我会检查生成的存储过程的代码,以了解为什么它会尝试插入记录而不是更新记录。
事实上,如果需要,您可以手动更改 EntityState
,但这样做的理由不多。