Is it possible to transform data stored in a column using a calculation performed in c# during an Entity First database migration?
Currently, I have a column named Content
of type nvarchar
. I'd like to replace it with a column named ContentBinary
of type varbinary
, copying the content of each row in the process, but also transforming the content.
Specifically, I want to convert the string to a UTF-8 encoding and then compress it.
I know that the DbMigration class allows for transformation / data motion using the Sql*() methods, but those methods appear to require all the transformation logic to be in SQL. I think that would require the compression logic to be duplicated as a stored procedure in SQL Server, which would double the effort required and lead to the potential for inconsistencies over just using the custom c# compression routine directly.
I'd like to be able to iterate through all the rows, read each Content
value, apply the transformation in C#, and then write it to ContentBinary
.
I think this may need to happen as part of the migration transaction for consistency but also because only Content
will exist before the migration and only ContentBinary
will exist afterward. I assume that rules out opening a separate database connection during the migration. However, if there is a way to access the connection being used for the migration transaction, perhaps that would be enough.