最初にエンティティ フレームワーク 5 コードで単純な自己参照を作成しようとしています。アイテムはオプションの子を持つことができ、その親について知る必要はありません。
public class Item
{
public int ItemId { get; set; }
public int? PreviousItemId { get; set; }
public virtual Item PreviousItem { get; set; }
}
ただし、これら3つになるため、何らかの理由でキーフィールドを使用したくありません。
ItemId
PreviousItemId
PreviousItem_ItemId
最後に余分なフィールドではなく、指定したフィールドを使用するようにします。私は注釈を試しました:
[ForeignKey("PreviousItemId")]
public virtual Item PreviousItem { get; set; }
また、流暢なAPIを使用:
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration()
{
HasOptional(i => i.PreviousItem)
.WithMany()
.HasForeignKey(i => i.PreviousItemId);
}
}
しかし、私はそれらの両方でこの例外を受け取ります:
System.InvalidOperationException: Sequence contains no elements
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GetQualifiedTableName(XDocument model, String entitySetName)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<FindRenamedIndependentAssociationColumns>b__ba(<>f__AnonymousType16`2 <>h__TransparentIdentifieraa)
at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
at System.Linq.Enumerable.<DistinctIterator>d__81`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, String connectionString)
at System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(XDocument model, 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.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Sequence contains no elements
ここで私が間違っていることを誰かに教えてもらえますか? 読んでくれてありがとう。パッケージ マネージャー コンソールから update-database を実行すると、例外が発生します。