Entity Framework と流暢な API を使用してバインディングを構成しています。私の2つのエンティティは次のようになります。
public class Matter
{
#region Properties
/// <summary>
/// Primary key
/// </summary>
public int Id { get; set; }
/// <summary>
/// Navigation: the most recent Relativity activity for the Matter
/// </summary>
public virtual RelativityActivity RelativityRecentActivity { get; set; }
#endregion
}
public class RelativityActivity
{
#region Properties
/// <summary>
/// Primary key
/// </summary>
public int Id { get; set; }
/// <summary>
/// Foreign key: the Matter that the Relativity Activity entry is associated with
/// </summary>
public Matter Matter { get; set; }
#endregion
}
私は既存のテーブル スキーマを使用しています。スキーマでは、RelativityActivity
テーブルには単にMatter
のId
列への外部キーがあります。したがって、Matter
はリレーションのプリンシパルであり、 がなくても存在できますRelativityActivity
。ただし、 はなしRelativityActivity
では存在できませんMatter
。
私の人生では、これが期待どおりに機能するように構成することはできないようです。私はSOに関するたくさんの回答を読み、それぞれを読んだ後に流暢なAPIバインディングを調整しましたが、「リレーションのプリンシパルエンドを判断できない」から「不適切な多重度で構成しました」までの範囲のエラーが常に発生するようです.
現在の流暢な API バインディングは次のようになります。
modelBuilder.Entity<RelativityActivity>().HasRequired(m => m.Matter).WithRequiredDependent(m => m.RelativityRecentActivity).Map(m => m.MapKey("matter")).WillCascadeOnDelete(true);
、RelativityActivity
および:
modelBuilder.Entity<Matter>().HasOptional(m => m.RelativityRecentActivity).WithRequired(m => m.Matter);
のためにMatter
。
リレーションには 2 つのバインディングがあります。バインディングがないと、Matter
プリンシパル エンド エラーを特定できなかったからです。しかし今、多重度に関するエラーが発生しました。
明確にするために編集:
表の外部キー列は列RelativityActivity
ではありませんId
。これは、実際には という名前の別の列matter
です。Map
バインディングの関数を使用してこれを指定しようとしました。