EF CodeFirst: Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong
Solution 1
If you're using Code First and have (an) existing Migration script(s) and are trying to overwrite a change (i.e. renaming a column) that has since been deleted, then you'll get that error output. Simplest way is to delete the migration script, Add-Migration via NuGet, and then update the database.
Solution 2
This is because of name Conflict of Class (Model) names with other reserved or generated ones, when auto creates the tables and ... .
Considering that EF Code First creates the intervene tables to relate 2 or more tables using name of tables for derived intervene table, so when you use a class name that employs a name like the intervene tables, we'll get such this ambiguous error.
For example if you have a Question class which has an Answer navigation property the internal model metadata will contain a reference called QUESTION_ANSWER
To solve this, try to change the class names (used for generating tables) and ensure their uniqueness.
Solution 3
I got this with Entity Framework 6 when trying to rename a foreign key in my migrations script using the Sql(" ... ") method. The workaround I had was to use square brackets around the name:
i.e. changing this:
sp_rename 'FK_dbo.tablename_dbo.othertablename_fieldname', 'FK_dbo.tablename_dbo.othertablenewname_fieldnewname', 'object'
...to this:
sp_rename '[FK_dbo.tablename_dbo.othertablename_fieldname]', 'FK_dbo.tablename_dbo.othertablenewname_fieldnewname', 'object'
SQL Server is then able to find the foreign key.
Solution 4
I just had the same issue, also after refactoring. For me, the problem was caused by a migration that was refactored as well.
The result was that another migration could not be executed because that migration was looking for a table by searching it's old name.
Reverting the changes in the migration solved this issue.
Solution 5
Steer clear of reserved words or class names in your migration title.
This happened to me when I named a migration "Init" - renamed to "InitialCreate" and all worked perfectly
Comments
-
Saber Amani over 2 years
I've a table named
EducationTypes
and an Entity namedEducationType
, I renamed one of entity properties, now I'm frequently gettingEither the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong
. How can I solve this issue?The generated SQL Script:
EXECUTE sp_rename @objname = N'dbo.EducationTypes.nvarchar', @newname = N'EducationTypeTitle', @objtype = N'COLUMN'