Sto cercando di dare il via all'EF6. E bloccato con questo errore: EntityType 'Task' non ha una chiave definita. Definire la chiave per questo EntityType.
Capisco che si tratta di un errore comune e una ricerca di Google porta a molti blog / articoli che spiegano come risolvere una "chiave" non definita. Ma non sono in grado di risolvere. Ho le mie entità in una libreria separata e non sono disposto a utilizzare il metodo di annotazione per risolvere questo problema. Ho intenzione di mantenere pulita la mia libreria di entità da qualsiasi dipendenza ..
Ecco la mia modalità:
public class Task
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Due { get; set; }
public int Priority { get; set; }
}
E qui è il mio contesto:
public class TaskManagerContext : DbContext
{
public TaskManagerContext() : base("TMConnection") {
}
public DbSet<Task> Tasks { get; set; }
}
Quando eseguo Enable-Migrations
ottengo il seguente errore:
PM> Enable-Migrations -Force
Checking if the context targets an existing database...
System.Data.Entity.ModelConfiguration.ModelValidationException: One or more validation errors were detected during model generation:
TaskManager.DataLayer.Task: : EntityType 'Task' has no key defined. Define the key for this EntityType.
Tasks: EntityType: EntitySet 'Tasks' is based on type 'Task' that has no keys defined.
at System.Data.Entity.Core.Metadata.Edm.EdmModel.Validate()
at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized()
at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer)
at System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter w)
at System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action`1 writeXml)
at System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext context)
at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase)
at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
at System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(String language, String rootNamespace)
at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
One or more validation errors were detected during model generation:
TaskManager.DataLayer.Task: : EntityType 'Task' has no key defined. Define the key for this EntityType.
Tasks: EntityType: EntitySet 'Tasks' is based on type 'Task' that has no keys defined.
Come affermato da @HenkHolterman, questo è probabilmente causato dall'avere una classe personalizzata con lo stesso nome di una classe da .Net Framework. Non è possibile garantire Entity Framework per selezionare la classe Task
anziché System.Threading.Tasks.Task
meno che non ci si riferisca in modo specifico al riferimento completo del namespace.