私は、次のような状況があります:私はいくつかのアカウントと少数gametablesを持ってEFコードファースト外部キー関係
- を。
- 各gametableにはクリエイターがいます。
- 各アカウントはテーブルに座ることができます(ただし、必ずしもそうする必要はありません)。
私のモデルクラスは次のようになります。
public class GameTable
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id
{
get;
set;
}
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
public Guid CreatorId { get; set; }
[ForeignKey(nameof(CreatorId))]
public Account Creator { get; set; }
}
public class Account
{
public Account()
{
Elo = 1000;
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[MaxLength(15)]
[MinLength(4)]
public string Name { get; set; }
[Required]
[MaxLength(32)]
[MinLength(32)]
public string PasswordHash { get; set; }
public int Elo { get; set; }
public bool IsAdmin { get; set; }
public Guid? CurrentTableId { get; set; }
[ForeignKey(nameof(CurrentTableId))]
public virtual GameTable CurrentTable { get; set; }
}
私のコンテキストでは、現在、このように探しています:
[Export(typeof(MyDbContext)), PartCreationPolicy(CreationPolicy.Shared)]
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MyDbContext : DbContext
{
public MyDbContext() : base("DbContextCon")
{
Database.SetInitializer<PiksenDbContext>(new CreateDatabaseIfNotExists<PiksenDbContext>());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
public virtual DbSet<Account> Accounts { get; set; }
public virtual DbSet<SecurityToken> SecurityTokens { get; set; }
public virtual DbSet<GameTable> GameTables { get; set; }
}
残念ながら、それは次のように設定し、外部キーの両方で動作しません。次のメッセージが、現時点では私のいくつかの頭痛を与えている:
のSystem.InvalidOperationException:namespace.GameTable 『と 『namespace.Account』「タイプの間の関連の主な 終わりを判断できません』を。この関連付けの主な終了点は、Fluent APIの関係または の注釈を使用して明示的に設定された である必要があります。
しかし、FK-Relationshipsのいずれかをコメントアウトすると、すべてが問題ありません。それらの2つの間に何らかの矛盾があるようです。
私が取得しようとしていた結果がAccount
に1 NULL可能FKではCreatorId
と呼ばれるGameTable
でCurrentTableId
と呼ばれる非NULL可能FK。
は、私の知る限り、データアノテーションを使用して利用できないなど)(WithRequiredPrincipleの承知している、あなたは流暢APIを使用して関係を設定する必要があります。 – DevilSuichiro
@DevilSuichiro残念なことに、両方のguidがnullになり、両方のナビゲーションプロパティが仮想であっても、それでもエラーが表示されます。 – Jannik
怠惰なローディング能力とカラムの必須/オプションパラメータは、プリンシパル/依存のアカウントでは関係ありません。 0..1から0へ..1リレーションシップ(またはその間のどこか)を使用する場合は、最初に挿入され、最後に削除されたリレーションシップのプリンシパルエンドを構成する必要があります。これがこのエラーの原因です。ナビゲーションプロパティの「状態」とは関係ありません。 – DevilSuichiro