Guid:如何通过 LINQ to Entities 获取最新插入的记录?
Guid: How can I get latest inserted record via LINQ to Entites?
我正在使用以下代码获取最新插入的记录:
public Request GetLastRequest()
{
return _request.Find(_request.Max(p => p.Id));
}
如您所见,Id
是 Guid
的类型:
public class Request
{
public Request()
{
Id = Guid.NewGuid();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
}
运行我的代码后,出现此错误:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
PS:如果我将 int
用于 Id
,则以上代码有效。
这适用于 int
,因为 entity framework 可以将 Max()
-linq-方法转换为适当的 sql-函数。但是 Guid
失败,因为它们不受支持。
看看这个(向下滚动到 MAX( 表达式 )):http://msdn.microsoft.com/en-us/library/bb399163%28v=vs.110%29.aspx
A Collection (T) where T is one of the following types: Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.
您需要为记录加上时间戳或在记录上放置一个自动递增的 int - GUID 是随机生成的,因此插入后它们实际上并不代表 "max" GUID。
如果你的主要目的是插入记录后获取记录,你可以在你的应用层生成GUID并插入到数据库中,这样你就可以return你刚刚插入的GUID按顺序排列查询回数据库以获取您的信息。
我正在使用以下代码获取最新插入的记录:
public Request GetLastRequest()
{
return _request.Find(_request.Max(p => p.Id));
}
如您所见,Id
是 Guid
的类型:
public class Request
{
public Request()
{
Id = Guid.NewGuid();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
}
运行我的代码后,出现此错误:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
PS:如果我将 int
用于 Id
,则以上代码有效。
这适用于 int
,因为 entity framework 可以将 Max()
-linq-方法转换为适当的 sql-函数。但是 Guid
失败,因为它们不受支持。
看看这个(向下滚动到 MAX( 表达式 )):http://msdn.microsoft.com/en-us/library/bb399163%28v=vs.110%29.aspx
A Collection (T) where T is one of the following types: Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.
您需要为记录加上时间戳或在记录上放置一个自动递增的 int - GUID 是随机生成的,因此插入后它们实际上并不代表 "max" GUID。
如果你的主要目的是插入记录后获取记录,你可以在你的应用层生成GUID并插入到数据库中,这样你就可以return你刚刚插入的GUID按顺序排列查询回数据库以获取您的信息。