Как исправить «нераспознанный формат guid»?

#c# #mysql #asp.net-mvc #guid

#c# #mysql #asp.net-mvc #guid

Вопрос:

я получаю ошибку «непризнанный формат guid» в моем asp.net Приложение MVC, когда я пытаюсь выбрать Guid из базы данных mysql.

         var contact_cstm = ctx.contacts_cstm.Where(x => x.national_id_c == model.NID).FirstOrDefault();
        
        if (contact_cstm != null)
        {                        
            var contact = ctx.contacts.Where(x => x.id  == contact_cstm.id_c amp;amp; x.deleted==false).FirstOrDefault();
            
            if (contact != null)
            {
                model.FName = contact.first_name;
            }
            ctx.SaveChanges();

            return true;
        }
  

в contact_cstm я получаю GUID нормально,

но во втором запросе, когда я использую предложение where, он покажет мне ошибку.

 var contact = ctx.contacts.Where(x => x.id  == contact_cstm.id_c amp;amp; x.deleted==false).FirstOrDefault();
  

Мой ContactModel

 public partial class contact
{
    public System.Guid id { get; set; }
    public string first_name { get; set; }
    public string phone_mobile { get; set; }
}
  

Трассировка стека:

 [FormatException: Unrecognized Guid format.]
   System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResultamp; result)  12635324
   System.Guid..ctor(String g)  108
   MySql.Data.Types.MySqlGuid.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket packet, Int64 length, Boolean nullVal)  205
   MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)  168
   MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)  65
   MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)  158
   MySql.Data.MySqlClient.MySqlDataReader.Read()  62
   MySql.Data.Entity.EFMySqlDataReader.Read()  13
   System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.StoreRead()  36

[EntityCommandExecutionException: An error occurred while reading from the store provider's data reader. See the inner exception for details.]
   System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.HandleReaderException(Exception e)  4816212
   System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.StoreRead()  49
   System.Data.Entity.Core.Common.Internal.Materialization.SimpleEnumerator.MoveNext()  41
   System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()  114
   System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source)  168
   System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1(IEnumerable`1 sequence)  42
   System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot)  61
   System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression)  119
   System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression)  106
   System.Linq.Queryable.FirstOrDefault(IQueryable`1 source)  220
   RegaSelfService.BLL.ContactBLL.updateUserIfExist(ContactModel model) in C:inetpubwwwrootRega_selfServiceRegaSelfServiceRegaSelfServiceBLLContactBLL.cs:46
   RegaSelfService.Controllers.<login>d__3.MoveNext() in C:inetpubwwwrootRega_selfServiceRegaSelfServiceRegaSelfServiceControllersContactController.cs:42
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)  102
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)  64
   System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult)  97
   System.Web.Mvc.Async.<>c__DisplayClass8_0.<BeginInvokeAsynchronousActionMethod>b__1(IAsyncResult asyncResult)  17
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)  10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End()  49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)  32
   System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0()  58
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2()  228
   System.Web.Mvc.Async.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult)  10
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)  10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End()  49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)  34
   System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4()  35
   System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult)  100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)  10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End()  49
   
  

Комментарии:

1. Проблема в том, что вы делаете contact_cstm.otp_c = num.ToString(); , что приводит к неправильному форматированию идентификаторов GUID, поскольку формат GUID должен быть xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx где x любой буквенно-цифровой символ, M версия и N вариант

2. Извините за путаницу, contact_cstm.otp_c не имеет отношения к вопросу, поэтому я удалил его. Это просто для обновления OTP, он не имеет никакого отношения к GUID.

3. Обратите внимание, что Visual Studio — это инструмент, который вы используете для создания своего кода, он не играет роли в фактическом выполнении вашего кода. Вы также можете создавать свой код в Visual Studio Code, MonoDevelop, JetBrains’Rider и т. Д. И вы все равно получите ту же ошибку при ее запуске!

4. Пожалуйста, добавьте stacktrace в виде текста, а не изображения.

5. теперь я добавил трассировку стека в виде текста 🙂

Ответ №1:

Пожалуйста, попробуйте это :

 var id_c = new Guid(contact_cstm.id_c);

var contact = ctx.contacts.Where(x => x.id  == id_c amp;amp; x.deleted==false).FirstOrDefault();
  

Комментарии:

1. Итак, почему OP пытается это сделать? Хороший ответ объяснит проблему и решение