【问题标题】:How to fix "unrecognized guid format"?如何修复“无法识别的 guid 格式”?
【发布时间】:2021-01-26 11:49:13
【问题描述】:

当我尝试从 mysql 数据库中选择 Guid 时,我的 asp.net MVC 应用程序中出现“无法识别的 guid 格式”错误。

        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 && 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 && x.deleted==false).FirstOrDefault();

我的联系人模型

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, GuidResult& 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:\inetpub\wwwroot\Rega_selfService\RegaSelfService\RegaSelfService\BLL\ContactBLL.cs:46
   RegaSelfService.Controllers.<login>d__3.MoveNext() in C:\inetpub\wwwroot\Rega_selfService\RegaSelfService\RegaSelfService\Controllers\ContactController.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
   

【问题讨论】:

  • 问题是你正在做contact_cstm.otp_c = num.ToString();,这导致GUID不是correctly formatted,因为GUID格式必须是xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,其中x是任何字母数字字符,@987654329 @ 是版本,N 是变体
  • 很抱歉造成混淆,contact_cstm.otp_c 与问题无关,因此我将其删除。这只是为了更新与 GUID 无关的 OTP。
  • 请注意,Visual Studio 是您用于编写代码的工具,它在实际执行代码时不起任何作用。您还可以在 Visual Studio Code、MonoDevelop、JetBrains' Rider 等中编写代码,但在运行时仍然会遇到同样的错误!
  • 请将堆栈跟踪添加为文本,而不是图像。
  • 我现在将堆栈跟踪添加为文本 :)

标签: c# mysql asp.net-mvc guid


【解决方案1】:

请试试这个:

var id_c = new Guid(contact_cstm.id_c);

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

【讨论】:

  • 那么,为什么 OP 会尝试这个?一个好的答案将解释问题,以及解决方案
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多