Как я могу сначала использовать представление базы данных в корневом коде сущности,
Как использовать представления в первой структуре сущности кода
Ответ 1
Если, как и я, вас интересует только отображение объекта, поступающего из другой базы данных (erp в моем случае), чтобы связать их с сущностями, специфичными для вашего приложения, тогда вы можете использовать представления при использовании таблицы (map вид таким же образом!). Очевидно, что если вы попытаетесь обновить эти объекты, вы получите исключение, если представление не будет обновляться. Процедура такая же, как в случае обычных (на основе таблицы) объектов:
- Создайте класс POCO для представления; например, FooView
- Добавить свойство DbSet в класс DbContext
-
Используйте файл FooViewConfiguration для установки другого имени для представления (используя ToTable ( "Foo" ), в конструкторе) или для установки конкретных свойств
public class FooViewConfiguration : EntityTypeConfiguration<FooView> { public FooViewConfiguration() { this.HasKey(t => t.Id); this.ToTable("myView"); } }
-
Добавьте файл FooViewConfiguration в modelBuilder, например, овертидинг метода OnModelCreating контекста:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new FooViewConfiguration ()); }
Ответ 2
Если все, что вам нужно, это куча ненормированных объектов, вы можете просто создать общедоступное свойство get-only IQueryable<TDenormolized>
в своем классе DbContext
.
В get
вы возвращаете результат Linq для проецирования де-нормированных значений в ваши ненормированные объекты. Это может быть лучше, чем писать представление БД, потому что вы программируете, вы не ограничены только использованием операторов select
. Также он скомпилирует тип времени безопасным.
Просто будьте осторожны, не вызывайте нумерации, такие как вызовы ToList()
, которые нарушают отложенный запрос, и вы можете получить миллион записей из базы данных и отфильтровать их на своем сервере приложений.
Я не знаю, правильно ли это, но я попробовал, и он работает для меня.
Ответ 3
Это может быть обновление, но для использования представлений с EF Code сначала просто добавьте [Таблица ( "NameOfView" ) в начало класса, и все должно работать правильно, без необходимости проходить все обручи, которые все остальные проходят, Также вам нужно будет сообщить один из столбцов в качестве столбца [key]. Вот мой пример кода для его реализации.
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SomeProject.Data
{
[Table("SomeView")]
public class SomeView
{
[Key]
public int NameID { get; set; }
public string Name { get; set; }
}
}
И вот как выглядит контекст
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}