无法将类型 'System.Guid' 的对象转换为类型 'System.String' 而我只使用 Guid
Unable to cast object of type 'System.Guid' to type 'System.String' Whilst I am only using Guid
我正在尝试使用以下函数从我的数据库中获取类型为 'DocumentationPage' 的对象:
CurrentDocumentationPage = await documentationPageService.GetDocumentationPageById(DocumentID);
在这种情况下我使用
[Parameter] public Guid DocumentID { get; set; }
这与 NavigateTo
函数一起传递
public void OnNavItemClick(Guid Id)
{
navMan.NavigateTo($"/View/" + Id);
}
从我的数据库中获取相应的 Guid。
我的 DocumentationPage
class 如下所示:
public class DocumentationPage : Entity
{
public string UserId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime Published { get; set; }
public DateTime Updated { get; set; }
}
实体在哪里:
public class Entity
{
public Guid Id;
}
现在应该会发生以下情况:
- 单击包含
Guid ID
的 NavMenu 项以在 OnClick
函数中传递。
- 使用已传递的 ID 触发函数:
CurrentDocumentationPage = await documentationPageService.GetDocumentationPageById(DocumentID);
- 之后到达方法:
public async Task<DocumentationPage> GetByIdAsync(Guid id)
{
DocumentationPage documentationPage = context.DocumentationPages.FirstOrDefault(c => c.Id == id);
return documentationPage;
}
此时提示我错误
Unable to cast object of type 'System.Guid' to type 'System.String
当没有意义时,我尝试将其用作字符串。
这是我的堆栈跟踪:
HResult=0x80004002
Message=Unable to cast object of type 'System.Guid' to type 'System.String'.
Source=System.Private.CoreLib
StackTrace:
at System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(Void* toTypeHnd, Object obj)
at Microsoft.Data.SqlClient.SqlBuffer.get_String()
at Microsoft.Data.SqlClient.SqlDataReader.GetString(Int32 i)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
at System.Linq.Queryable.First[TSource](IQueryable`1 source)
at TerceraDeveloperSite.Repositories.DocumentationPageRepository.<GetByIdAsync>d__2.MoveNext() in C:\Users\Rowin\source\repos\TerceraDeveloperSite\Repositories\DocumentationPageRepository.cs:line 21
This exception was originally thrown at this call stack:
[External Code]
TerceraDeveloperSite.Repositories.DocumentationPageRepository.GetByIdAsync(System.Guid) in DocumentationPageRepository.cs
现在,我确实找到了
at Microsoft.Data.SqlClient.SqlDataReader.GetString(Int32 i)
这两种方式都没有意义,但据我所知我没有改变任何关于 SqlDataReader 的东西。
我不明白为什么这个方法有问题。
Llama 给出了答案,
我的数据库设置为 UserID
为 Guid
。
但是在我的 DocumentationPage
class 中是 string
而不是 Guid
我正在尝试使用以下函数从我的数据库中获取类型为 'DocumentationPage' 的对象:
CurrentDocumentationPage = await documentationPageService.GetDocumentationPageById(DocumentID);
在这种情况下我使用
[Parameter] public Guid DocumentID { get; set; }
这与 NavigateTo
函数一起传递
public void OnNavItemClick(Guid Id)
{
navMan.NavigateTo($"/View/" + Id);
}
从我的数据库中获取相应的 Guid。
我的 DocumentationPage
class 如下所示:
public class DocumentationPage : Entity
{
public string UserId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime Published { get; set; }
public DateTime Updated { get; set; }
}
实体在哪里:
public class Entity
{
public Guid Id;
}
现在应该会发生以下情况:
- 单击包含
Guid ID
的 NavMenu 项以在OnClick
函数中传递。 - 使用已传递的 ID 触发函数:
CurrentDocumentationPage = await documentationPageService.GetDocumentationPageById(DocumentID);
- 之后到达方法:
public async Task<DocumentationPage> GetByIdAsync(Guid id)
{
DocumentationPage documentationPage = context.DocumentationPages.FirstOrDefault(c => c.Id == id);
return documentationPage;
}
此时提示我错误
Unable to cast object of type 'System.Guid' to type 'System.String
当没有意义时,我尝试将其用作字符串。
这是我的堆栈跟踪:
HResult=0x80004002
Message=Unable to cast object of type 'System.Guid' to type 'System.String'.
Source=System.Private.CoreLib
StackTrace:
at System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(Void* toTypeHnd, Object obj)
at Microsoft.Data.SqlClient.SqlBuffer.get_String()
at Microsoft.Data.SqlClient.SqlDataReader.GetString(Int32 i)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
at System.Linq.Queryable.First[TSource](IQueryable`1 source)
at TerceraDeveloperSite.Repositories.DocumentationPageRepository.<GetByIdAsync>d__2.MoveNext() in C:\Users\Rowin\source\repos\TerceraDeveloperSite\Repositories\DocumentationPageRepository.cs:line 21
This exception was originally thrown at this call stack:
[External Code]
TerceraDeveloperSite.Repositories.DocumentationPageRepository.GetByIdAsync(System.Guid) in DocumentationPageRepository.cs
现在,我确实找到了
at Microsoft.Data.SqlClient.SqlDataReader.GetString(Int32 i)
这两种方式都没有意义,但据我所知我没有改变任何关于 SqlDataReader 的东西。
我不明白为什么这个方法有问题。
Llama 给出了答案,
我的数据库设置为 UserID
为 Guid
。
但是在我的 DocumentationPage
class 中是 string
而不是 Guid