получение идентификатора вновь добавленной записи с использованием linq для сущностей - PullRequest
5 голосов
/ 16 апреля 2011

Привет, это мой первый проект, использующий linq для сущностей.Я выяснил, как создать новую запись, мне просто нужно получить идентификатор, который был ей присвоен, чтобы я мог использовать ее в качестве FK в таблице расширений, когда добавляю туда записи.Я разрешаю пользователям создавать запрос, запрос может быть для нескольких единиц оборудования, поэтому у меня есть таблица Request и RequestedEquipment.Вот код, который я использую для создания запроса:

public void addReq(ReqType reqType, Employee reqBy, Location loc, string comm)
        {
            int reqID;
            Request req = new Request();
            req.Comments = comm;
            req.Employee = reqBy;
            req.ReqType = reqType;
                req.RequestStatus = findReqStat(1);
            req.Location = loc;
            entities.AddToRequests(req);
            entities.SaveChanges();
        }

Как получить идентификатор созданного запроса, чтобы я мог использовать его для создания необходимых записей в таблице RequestedEquipment?

Ответы [ 3 ]

8 голосов
/ 16 апреля 2011

Вы должны быть в состоянии получить значение идентификатора из вашего нового объекта Request после вызова SaveChanges (), так что-то вроде:

entities.SaveChanges();
reqID = req.ID;

SaveChanges () должен сохранить вашу новую запись в базе данных, и если столбец идентификатора установлен как столбец идентификаторов в БД, этот автоматически сгенерированный идентификатор должен быть передан обратно в ваш объект через структуру сущностей.

Также на всякий случай вот сообщение в блоге по проблеме, где поле идентификатора не обновлялось автоматически: http://dotnethacker.wordpress.com/2010/12/24/entity-framework-savechanges-doesnt-get-the-generated-identity-key/

1 голос
/ 23 июля 2012

Райан и Микисито оба правы. Однако, если вам нужно универсальное решение, взгляните на следующую функцию:

public static T AddEntity<T>(T ent)
{
    Type t = typeof(T);

    try
    {
        using (Entities be = new Entities())
        {
            be.AddObject(t.Name, ent);
            be.SaveChanges();

            return ent;
        }
    }
    catch (Exception)
    {
        return default(T);
    }
}

Таким образом, вы можете создать любой объект, который вам нужен, и, вернув вновь созданный объект, вы найдете его новый идентификатор. НТН.

0 голосов
/ 16 апреля 2011

Я полагаю, что созданный вами объект будет заполнен полем ID после сохранения изменений.

Поэтому после строки SaveChanges () проверьте значение поля идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...