Попробуйте использовать Database SetInitializer, который принадлежит к использованию System.Data.Entity;
В Global.asax
protected void Application_Start()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<yourContext>());
}
Это создаст новую базу данных каждый раз, когда ваша модель будет изменена. Но ваша база данных будет пустой. Чтобы заполнить ее фиктивными данными, вы можете использовать Seeding. Который вы можете реализовать как:
Посев ::
protected void Application_Start()
{
Database.SetInitializer(new AddressBookInitializer());
----rest code---
}
public class AddressBookInitializer : DropCreateDatabaseIfModelChanges<AddressBook>
{
protected override void Seed(AddressBook context)
{
context.yourmodel.Add(
{
});
base.Seed(context);
}
}
С Unicode SizeOf (SomeChar) <> Длина (SomeChar). По существу длина строки является меньше затем суммой размера ее символов. Пока Вы не принимаете SizeOf (Символ) = 1 или SizeOf (SomeString[x]) = 1 (так как оба - ЛОЖЬ теперь), или попытайтесь обменяться байтами с символами, затем Вы не должны испытывать затруднения. Любое место Вы делаете что-то творческие Байты наполнения в Символы или Строки, затем необходимо будет использовать AnsiString.
(SizeOf (SomeString) равняется все еще 4, неважно, длина, так как это - по существу указатель с некоторым волшебством компилятора.)
Люди часто неявно преобразовывают от символов до байтов в старом коде Delphi, действительно не думая об этом. Например, при записи в поток. Когда Вы пишете строку в поток, необходимо указать число байтов, которые Вы пишете, но люди часто передают счетчик символов вместо этого. См. это сообщение от Chris Bensen для другого примера.
Другим путем люди часто делают это неявное преобразование, и более старый код при помощи "строки", чтобы хранить двоичные данные. В этом случае они на самом деле хотят байты, но тип данных ожидает символы. D2009 имеет лучший тип для этого.
Я не попробовал Delphi 2009, но использую fpc, который также переключается на unicode медленно. Я на 95% уверен, что все ниже также содержит для Delphi 2009
В fpc (при поддержке unicode) это будет так, чтобы функции как 'длина' приняли кодовую страницу во внимание. Таким образом это возвратит длину строки, поскольку 'человек' видел бы его. Если существует - например - два китайских символа, это оба берет два байта памяти в unicode, длина возвратится 2, так как существует два символа в строке. Но строка возьмет 4 байта памяти. (+the память для подсчета ссылок и ведущего № 0, но этого в стороне)
Что Вы не можете сделать, больше это:
var p : pchar;
begin
p := s[1];
for i := 0 to length(string)-1 do
begin
write(p);
inc(p);
end;
end;
Поскольку этот код будет - в двух китайско-символьных примерах - пишут неправильные два символа. А именно, два байта, которые являются частью первого 'реального' символа.
Короче говоря: Длина () не возвращает сумму байтов, выделенных для строки больше, но количества символов. (Прежде чем переключатель к unicode, те два значения были равны друг другу),
Фактический размер символа не должен иметь значения, если Вы не делаете управление на уровне байта.
Позволяет не, забывают, что существуют времена, когда это преобразование не действительно желаемо. Скажите для хранения GUID в записи, например. Гуид может только содержать шестнадцатеричные символы плюс - и скобки... заставляющие их поднимать дважды пространство, могут оказать настоящее влияние на существующий код. Уверенный простое решение состоит в том, чтобы изменить их на AnsiString и соглашение с предупреждениями компилятора, если Вы делаете какую-либо обработку строк на них.
(Конечно, если я использую строки в качестве строк а не хранить какие-либо другие данные),
Это - ключевой пункт, ВЫ не используете строки для других целей, но некоторые люди делают. Они используют строки точно так же, как массивы, таким образом, они (и это включает меня), должен был бы проверить все такое использование, чтобы удостовериться, что ничто не повреждается...