Попробуйте следующее:
/ ^ stop. * $ /
Объяснение:
Если вы хотите обеспечить соблюдение за которым следует пробел, вы можете изменить RegEx следующим образом:
/ ^ stop \ s +. * $ /
Примечание. Также имейте в виду, что RegEx выше требует, чтобы за стоповым словом пробежало пространство! Поэтому он не будет соответствовать строке, содержащей только: stop
Пожалуйста, обратитесь к этой ссылке.
http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/
Вы должны установить свойство StoreGeneratedPattern для идентификации, а затем попробовать свой собственный код.
Или вы также можете использовать это.
using (var context = new MyContext())
{
context.MyEntities.AddObject(myNewObject);
context.SaveChanges();
int id = myNewObject.Id; // Your Identity column ID
}
Я использовал ответ Ladislav Mrnka , чтобы успешно получить идентификаторы при использовании Entity Framework, но я размещаю здесь, потому что я пропустил его (то есть использовал его там, где это не было необходимо) и подумал, что я опубликую свои выводы здесь, в случае, когда люди ищут «решить» проблему, которую я имел.
Рассмотрим объект Order, который имеет отношение внешнего ключа с Клиентом. Когда я добавил нового клиента и новый порядок одновременно, я делал что-то вроде этого:
var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id
Однако в моем случае это не требовалось, потому что у меня было отношение внешнего ключа между customer.Id и order.CustomerId
Все, что я должен был сделать, это следующее:
var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer};
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order
Теперь, когда я сохраняю изменения, идентификатор, созданный для клиента, также добавляется по заказу. Мне не нужны дополнительные шаги
. Я знаю, что это не отвечает на исходный вопрос, но подумал, что это может помочь разработчикам, которые не знакомы с EF, из-за использования голосового ответа для чего-то это может не потребоваться.
Когда вы сначала используете код EF 6.x
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
и инициализируете таблицу базы данных, он будет помещать
(newsequentialid())
в свойства таблицы под заголовком. По умолчанию Значение или Связывание, позволяющее заполнять идентификатор, когда он вставлен.
Проблема заключается в том, что вы создаете таблицу и добавляете часть
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
позже, будущие базы данных обновлений не будет добавлять обратно (newsequentialid ())
. Чтобы исправить правильный путь, нужно стереть миграцию, удалить базу данных и перенаправить ... или вы можете просто добавить (newsequentialid ()) в таблицу дизайнер.
Это довольно легко. Если вы используете идентификаторы сгенерированных БД (например, IDENTITY
в MS SQL), вам просто нужно добавить сущность к ObjectSet
и SaveChanges
по соответствующему ObjectContext
. Id
будет автоматически заполняться для вас:
using (var context = new MyContext())
{
context.MyEntities.AddObject(myNewObject);
context.SaveChanges();
int id = myNewObject.Id; // Yes it's here
}
Структура объекта по умолчанию следует за каждым INSERT
с SELECT SCOPE_IDENTITY()
, когда используются автоматически сгенерированные Id
s.
Я сталкиваюсь с ситуацией, когда мне нужно вставить данные в базу данных & amp; одновременно требуют, чтобы первичный идентификатор использовал структуру сущности. Решение:
long id;
IGenericQueryRepository<myentityclass, Entityname> InfoBase = null;
try
{
InfoBase = new GenericQueryRepository<myentityclass, Entityname>();
InfoBase.Add(generalinfo);
InfoBase.Context.SaveChanges();
id = entityclassobj.ID;
return id;
}
Вам необходимо перезагрузить объект после сохранения. Потому что он был изменен с помощью триггера базы данных, который не может быть отслежен EF. Итак, нам нужно перезагрузить объект снова из БД,
db.Entry(MyNewObject).GetDatabaseValues();
Затем
int id = myNewObject.Id;
Посмотрите на @jayantha ответ в следующем вопросе:
Вы также можете посмотреть в следующем вопросе @christian ответ в следующем вопросе:
Repository.addorupdate(entity, entity.id);
Repository.savechanges();
Var id = entity.id;
Это будет работать.
Объект, который вы сохраняете, должен иметь правильный Id
после распространения изменений в базе данных.
Вы можете получить идентификатор только после сохранения, вместо этого вы можете создать новый Guid и назначить перед сохранением.
Существует две стратегии:
ID
(int
или GUID
) Минусы: вы должны выполнить SaveChanges()
, чтобы получить ID
для просто сохраненных объектов. Плюсы: Можно использовать идентификатор int
. ID
- только GUID. Плюсы: минимизация операций SaveChanges
. Возможность вставить большой график новых объектов за одну операцию. Минусы: разрешено только для GUID
StoreGeneratedPattern
был недостающим для меня. – BurnsBA 2 April 2018 в 12:56