Intereting Posts
Как я могу интернационализировать строки, представляющие значения enums C #? VS 2008 Professional, Smart Device .NET C # project – медленная assembly ASP.NET C #, нужно нажать кнопку дважды, чтобы что-то произошло Хранилище Azure: сервер 403 не смог аутентифицировать запрос Wix Service Installer иногда не может установить или запустить Было ли много ненужных переменных причиной проблем с производительностью на C #? Как преобразовать DataTable в XML-файл в C #? C # возможный ошибочный пустой оператор WPF: настройка IsSelected для ListBox, когда TextBox имеет фокус, без потери выбора на LostFocus Как настроить усиление микрофона на C # (необходимо работать с XP и W7) Изменение значка по умолчанию в приложении Windows Forms Преобразовать список в разделяемую запятыми строку Результаты запроса не могут быть перечислены более одного раза .NET и P2P – запись сообщения P2P Как сделать регистр соответствия регулярным выражениям нечувствительным?

Могу ли я изменить имя схемы по умолчанию во фреймворке сущностей 4.3 с кодом?

В настоящее время я развертываю свое приложение в общедоступной среде хостинга, а сначала код с миграциями работает отлично, за исключением одного младшего икота. Каждый раз, когда я хочу нажать на сайт, я должен использовать параметр «Update-Database -script», потому что мне нужно добавить каждое имя таблицы в [dbo] потому что по умолчанию общий хост создает имя схемы по умолчанию, имя которого совпадает с именем имя пользователя базы данных.

Если я запишусь на свой общий хост и создаю базу данных, я должен создать пользователя. Если я назову этот администратор пользователя, тогда сначала создаются таблицы, а во время входа в систему, поскольку администратор выглядит примерно так: «[admin]. [BlogPosts]». Когда приложение запускается, все таблицы создаются, но я получаю исключение EF, потому что он говорит: «[dbo]. [BlogPosts]» недействителен. Если я переименую имя схемы в таблицу «[dbo]» вместо «[admin]», которая ее исправляет.

Чтобы обойти это, мне нужно создать сценарий миграции, который будет выполняться вручную, и добавить «[dbo]» перед всеми именами таблиц, потому что сценарий ссылается только на таблицы по их имени, а не по их схеме и их имени.

Есть ли простой способ обойти это? Было бы так приятно, если бы все, что мне нужно было сделать, это опубликовать приложение, и все просто сработало. Если бы не расхождение имени схемы, это было бы одним щелчком мыши, и все было бы великолепно.

Вы можете использовать метод ToTable для указания имени схемы. Если вы не укажете имя схемы, EF по dbo будет использовать dbo .

 public class MyContext { private string schemaName = "Foo"; protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("MyTable", schemaName); } } 

Для тех, кто использует Entity Framework 6, просто используйте метод HasDefaultSchema :

 public class Contexto : DbContext { public DbSet Users { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("MyDefaultDbSchema"); } } 

Для первых реализаций базы данных ее легко. Откройте файл edmx, щелкните правой кнопкой мыши-> Свойства и установите схему базы данных по умолчанию.

Для кода сначала эта статья кажется наиболее перспективной. http://devproconnections.com/entity-framework/working-schema-names-entity-framework-code-first-design

Я хотел бы добавить, так как это для C #, я написал один ниже для VB

 Public Class ClientDbContext Inherits DbContext Public Property Clients As DbSet(Of Client) Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder) modelBuilder.HasDefaultSchema("dbo") End Sub End Class 

В EF Code , по умолчанию, все настроено на основе пользовательского доступа с административным доступом « DBO-Schema » в SQL Server. Но если определенный пользователь определен для работы с базой данных, которая является общей для общего хостинга, тогда больше не будет доступа к управлению Dbo. На этот раз имена наших таблиц – dbo.tableName, например, someUser.tableName, а неточность этой точки делает невозможным запуск программы. Чтобы изменить и явно назначить пользователя, подключенного к базе данных. Если вы используете метаданные, следует использовать следующий метод :

 [Table("MyTableName", Schema="MySchemaName")] public class MyClassName { //Other Lines... } 

Или (будь то Fluent API настраивается следующим образом 🙂

 modelBuilder.Entity().ToTable("MyTableName", schemaName:"MySchemaName"); 

Обратите внимание на следующее: введите описание изображения здесь

хорошая рекомендация для изучения: http://www.c-sharpcorner.com/article/fluent-api-in-code-first-approach/