For my money, I don't use "User Defined Type with DB Mapping (ORM)" or the Table Generator. I either write a stored procedure or use a sql query component that will check my input variables key field (usually just an "id" column or something to see if the row exists. If not, it does an insert and if it does, it performs an update. Preferably with a transaction begin and rollback/commit inside a try block, just in case.
So, to more specifically answer your question, do you have a good key value for your table? If not, just tack on an auto incrementing "id" column. Obviously, this is much easier if the table has now data in it yet. Just to give you an idea of what I'm talking about, I dropped in the template I use below. If you are using the sql query generator, you may have to trick it into not thinking some things are variables by leaving them out, clicking on the find variables button, then putting the full query back in.
DECLARE @ErrorMessage nvarchar(4000), @ErrorSeverity int;
SELECT [id],... FROM [table]
WHERE [id] = @id
IF @@ROWCOUNT > 0
BEGIN
BEGIN TRY
BEGIN TRANSACTION
UPDATE [table]
SET [col1] = @col1
,...
WHERE [id] = @id
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY();
RAISERROR(@ErrorMessage,@ErrorSeverity,1)
END CATCH
END
ELSE
BEGIN
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO [table]
([col1],...)
VALUES
(
@col1
,...
)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY();
RAISERROR(@ErrorMessage,@ErrorSeverity,1)
END CATCH
END
EDIT: I suppose I should point out that this is my template for use in the stored procedure. I'm not sure how the workflow sql component would hadn't the SELECT statements for the error handling. As it would be a different set of results from the normal, it may take a dive.