Руководство: Как я могу получить последнюю вставленную запись через 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.


person Sirwan Afifi    schedule 03.01.2015    source источник
comment
В какой момент вы получаете ошибку?   -  person Rahul    schedule 03.01.2015
comment
@Rahul Внутри метода GetLastRequest(). возвращаться   -  person Sirwan Afifi    schedule 03.01.2015
comment
Руководства предназначены только для того, чтобы быть уникальными, они не предназначены для заказа. Вы не можете использовать Max для Guid в SQL Server, поэтому он не поддерживается EF. stackoverflow.com/questions/6069368/   -  person juharr    schedule 03.01.2015
comment
В отличие от форумов, мы не используем слова «Спасибо» или «Любая помощь приветствуется» или подписи на Stack Overflow. См. раздел Должен ли быть "Привет", "спасибо" слоганов и приветствий удалить из постов?. Кстати, это заранее спасибо, а не спасибо заранее.   -  person John Saunders    schedule 24.01.2015


Ответы (2)


Вам нужно будет поставить временную метку записи или поместить в запись автоинкрементное целое число — идентификаторы GUID генерируются случайным образом, поэтому они фактически не будут представлять «максимальный» GUID после вставки.

Если ваша основная цель — получить запись после ее вставки, вы можете сгенерировать GUID на уровне приложения и вставить его в базу данных, таким образом вы можете вернуть только что вставленный GUID, чтобы запросить обратно в базу данных вашу информацию. .

person C Bauer    schedule 03.01.2015

Это работает с int, потому что структура сущностей может преобразовать метод Max()-linq в соответствующую функцию sql. Но это не работает для Guid, поскольку они не поддерживаются.

Взгляните на это (прокрутите вниз до MAX( выражение )): http://msdn.microsoft.com/en-us/library/bb399163%28v=vs.110%29.aspx

Коллекция (T), где T является одним из следующих типов: Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.

person khlr    schedule 03.01.2015
comment
Это объясняет, почему код OP не работает, но на самом деле не отвечает на вопрос, как получить последнюю запись, если используются Guids. - person juharr; 03.01.2015
comment
Конечно, но я думаю, что ОП не знал об этом, поскольку он не просил решения, а просто задавался вопросом об ошибке. - person khlr; 03.01.2015
comment
Я понимаю, откуда вы, но заголовок буквально звучит как «Как получить последнюю вставленную запись через Linq to Entities?». Я просто думаю, что ваш ответ был бы лучше, если бы вы включили код для вставки последней записи. - person juharr; 03.01.2015