私はcode first
プロジェクトを作成しています。C#コードの最初の外部キー。外部キーは、参照のあるテーブル内の無効な列を参照しています
市
public class City
{
[Key]
public int CityId { get; set; }
[Required]
public int CAP { get; set; }
[Required]
public string Name { get; set; }
public int ProvinceId { get; set; }
[ForeignKey("ProvinceId")]
public virtual Province Province { get; set; }
public virtual ICollection<Shop> Shops { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
省
public class Province
{
[Key]
public int ProvinceId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Tag { get; set; }
public int RegionId { get; set; }
[ForeignKey("RegionId")]
public virtual Region Region { get; set; }
public virtual ICollection<City> Cities { get; set; }
}
私は他の人の実体を持っていますが、それらは以下のとおりです。
私は、 "incriminated" のものは以下の通り、いくつかのエンティティを持っていますログの問題ではないので、必要に応じて投稿を避けました私は追加します。
今、私はAdd-Migration name
コードを正常に実行しました。
問題がUpdate-Database -verbose
である(I出力を持つ-verbose方法を添加)
これは-verboseから関連するSQLコードである:
[...]
CREATE TABLE [dbo].[Cities] (
[Id] [int] NOT NULL IDENTITY,
[CAP] [int] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[ProvinceId] [int] NOT NULL,
CONSTRAINT [PK_dbo.Cities] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_ProvinceId] ON [dbo].[Cities]([ProvinceId])
CREATE TABLE [dbo].[Provinces] (
[Id] [int] NOT NULL IDENTITY,
[Name] [nvarchar](max) NOT NULL,
[Tag] [nvarchar](max) NOT NULL,
[RegionId] [int] NOT NULL,
CONSTRAINT [PK_dbo.Provinces] PRIMARY KEY ([Id])
)
[...]
ALTER TABLE [dbo].[Cities] ADD CONSTRAINT [FK_dbo.Cities_dbo.Provinces_ProvinceId] FOREIGN KEY ([ProvinceId]) REFERENCES [dbo].[Provinces] ([ProvinceId]) ON DELETE CASCADE
、現在エラーがある:
The external key 'FK_dbo.Cities_dbo.Provinces_ProvinceId' refers the invalid column 'ProvinceId' in table with references 'dbo.Provinces'. Impossible to create the relation, see previous errors
(I手動翻訳、それは完全ではないかもしれない)
LOG:
[上記と同じエラー]
はat System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable`1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.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.Update(String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ソリューション私は見つけたが、誰も私の問題を解決しませんでした。私は外来キー、その名前とその位置を変更しました。また、私のテーブルのIDの名前は何も..
私は間違って何ですか? Update-Database
ログを見ると
両方のテーブルのPKが、対応する「Id」(上記のモデルで予想される「ProvinceId」と「CityId」ではない)という名前が付けられているため、データアノテーション/流暢セットアップ/データベーステーブル。 –
@IvanStoevあなたは私がそれに気付かなかったことを知っていることを知っています..おそらく私は最初の移行を削除し、コードを新しいものに置き換える必要があります –
@IvanStoevそれでした..私はAdd-Migrationの名前を使用しました働くそのような簡単な問題とそれを解決するためのそのような長い時間!あなたが回答を投稿するなら、私はそれにフラグを立てます、ありがとう! –