EF и существующая база данных и таблица, с кучей новых таблиц.
Контекст:
В старой базе данных есть пользователь таблицы, который будет использовать новое приложение.
Я использовал объект DataModel
Wizard, чтобы отобразить его this .
Что у меня сейчас:
Куча новых сущностей и их конфигурация:
public class Bundle
{
public Bundle() { Produits = new HashSet<Produit>(); }
public int BundleID { get; set; }
public string Designation { get; set; }
public ICollection<Produit> Produits { get; set; }
}
public class BundleConfiguration : EntityTypeConfiguration<Bundle>
{
public BundleConfiguration()
{
ToTable("PL_Bundle");
HasKey(e => e.BundleID);
Property(e => e.Designation).HasMaxLength(200);
}
}
A DbContext
с расширением, использующим отражение для отображения всех доступных конфигураций.
public partial class FooBarDbContext : DbContext
{
public FooBarDbContext() : base("name=Model1")
=> Database.SetInitializer<FooBarDbContext>(null);
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ApplyAllConfigurations();
base.OnModelCreating(modelBuilder);
}
public DbSet<User> User { get; set; }
public DbSet<Bundle> Bundles { get; set; }
// [...]
}
public static class ModelBuilderExtensions
{
public static void ApplyAllConfigurations(this DbModelBuilder modelBuilder)
{
IEnumerable<Type> typesToRegister
= AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t => t.IsClass)
.Where(type => !string.IsNullOrEmpty(type.Namespace) &&
type.GetTypeInfo().BaseType != null &&
type.GetTypeInfo().BaseType.GetTypeInfo().IsGenericType &&
type.GetTypeInfo().BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>))
.ToArray();
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}
}
}
В вызывающем приложении я пытаюсь проверить базу данных и таблицу, чтобы проверить, все ли работает ..
static void Main(string[] args)
{
var db = new FooBarCore.DbContext.FooBarDbContext();
var all = db.User.ToList(); // Work
var bundles1 = db.Bundles.ToList();
Предыдущая строка выдает мне сообщение об ошибке:
Nom d'objet 'dbo.PL_Bundle' non valide. => Неверное имя объекта 'dbo.PL_Bundle'
Что я пробовал:
Нахождение проблемы ModelBuilderExtensions
. Но с использованием классического modelBuilder.Configurations.Add(new BundleConfiguration());
.
Или используя свободный API прямо в OnModelCreating
выдает ту же ошибку.
Проверьте базу данных => Таблицы здесь нет.
- Поиск
EF not create table
, но CreateDatabaseIfNotExist
, DropCreateDatabaseWhenModelChanges
, DropCreateDatabaseAlways
страшны, все они имеют эту Drop Database в названии.