c# - mvc - EF CodeFirst: إما أن يكون المعلمobjname غامضًا أو أنobjtype المطالب به(COLUMN) غير صحيح




mvc code first approach (4)

لقد حصلت على جدول باسم EducationTypes وكيانًا باسم EducationType ، Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong تسميته أحد خصائص الكيان ، أما الآن Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong ما أحصل على Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong . كيف يمكنني حل هذه المشكلة؟

سيناريو SQL الذي تم إنشاؤه:

EXECUTE sp_rename @objname = N'dbo.EducationTypes.nvarchar', @newname = N'EducationTypeTitle', @objtype = N'COLUMN'

https://code.i-harness.com


أنا فقط كان نفس المشكلة ، وأيضا بعد إعادة بيع ديون. بالنسبة لي ، كانت المشكلة ناتجة عن عملية ترحيل تمت إعادة صياغتها أيضًا.

كانت النتيجة أنه تعذر تنفيذ ترحيل آخر لأن ذلك الترحيل كان يبحث عن جدول من خلال البحث عن الاسم القديم.

أدى الرجوع عن التغييرات في الترحيل إلى حل هذه المشكلة.


إذا كنت تستخدم Code First ولديك (a) برنامج (برامج) Migration موجود حاليًا وكنت تحاول الكتابة فوق تغيير (أي إعادة تسمية عمود) تم حذفه منذ ذلك الحين ، فستحصل على هذا الخطأ الناتج. أبسط طريقة هي حذف البرنامج النصي الترحيل ، إضافة الترحيل عبر NuGet ، ثم تحديث قاعدة البيانات.


في الواقع هذا الخطأ يحدث أيضا عندما قمت فقط حذف قاعدة البيانات ، ولا يدرك السياق الخاص بك أن قاعدة البيانات الخاصة بك ليست هناك.

قمت بإعادة إنشاء قاعدة البيانات ، والآن تم حل الخطأ.

سكرتير خاص تأكد من التحقق من قاعدة البيانات لا يزال هناك عند محاولة تشغيل قاعدة بيانات التحديث


قضيت الكثير من الوقت في محاولة لمعرفة سبب حدوث ذلك على قاعدة بيانات الإنتاج التي يمكنني الوصول إليها فقط عبر mylittlesql. لا يمكن إعادة إنتاج المشكلة ولكن جعل هذا البرنامج النصي من أجزاء sp_rename حتى عندما يحدث في المرة القادمة يمكنني معرفة السبب بالضبط. نعم هو مبالغة ، ولكن قد يساعد شخص آخر.

هناك مشكلة إذا تمكنت بطريقة ما من الحصول على '[' أو ']' في اسم العمود الفعلي كما تم تخزينها في sys.columns ، (؟ 'nvarchar' كاسم العمود الخاص بك ؟؟؟؟). لا يتوافق PARSENAME مع [] ويعود إلى null ، لذلك لن يعمل sp_rename.

سيساعد هذا فقط في تشخيص مشكلة حالة "العمود" برمز الخطأ 15248 وهو المكان الذي أواجه فيه هذه المشكلة:

declare @objname nvarchar(1035) = N'dbo.EducationTypes.nvarchar' -- input to sp_rename
declare @newname sysname = N'EducationTypeTitle' -- input to sp_rename

declare @UnqualOldName  sysname,
@QualName1      sysname,
@QualName2      sysname,
@QualName3      sysname,
@OwnAndObjName  nvarchar(517),  
@SchemaAndTypeName  nvarchar(517),  
@objid          int,
@xtype          nchar(2),
@colid          int,
@retcode        int

select @UnqualOldName = parsename(@objname, 1),
        @QualName1 = parsename(@objname, 2),
        @QualName2 = parsename(@objname, 3),
        @QualName3 = parsename(@objname, 4)
print 'Old Object Name = ''' + convert(varchar,isnull(@UnqualOldName ,'')) + ''''
-- checks that parsename is getting the right name out of your @objname parameter
print 'Table name:'
if @QualName2 is not null
begin
print QuoteName(@QualName2) +'.'+ QuoteName(@QualName1)
select @objid = object_id(QuoteName(@QualName2) +'.'+ QuoteName(@QualName1))
end
else
begin
print QuoteName(@QualName1)
select @objid = object_id(QuoteName(@QualName1))
end
-- check if table is found ok
print 'Table Object ID = ''' + convert(varchar,isnull(@objid ,-1)) + ''''
select @xtype = type from sys.objects where object_id = @objid
print '@xtype = ''' + convert(varchar,isnull(@xtype,'')) + ''' (U or V?)'
if (@xtype in ('U','V'))
begin
print 'select @colid = column_id from sys.columns where object_id = ' + 
    convert(varchar,isnull(@objid,0)) + ' and name = ''' +
        @UnqualOldName + ''''

    select * from sys.columns where object_id = @objid -- and name = @UnqualOldName
    select @colid = column_id from sys.columns 
    where object_id = @objid and name = @UnqualOldName
    print 'Column ID = ''' + convert(varchar,isnull(@colid,-1)) + ''''
end

سيؤدي ذلك إلى إخراج بعض الرسائل المفيدة في علامة التبويب الرسائل (من SSMS أو أي شيء تستخدمه) وحقول الجدول في علامة التبويب "النتائج".

حظا طيبا وفقك الله.





code-first-migrations