これがかなり簡単になることを望んでいましたが、あまり運がありませんでした。私が使用しているデータベースには、ユーザー用のテーブルとトークン用のテーブルがあり、トークンと1対1の関係で相互に関連しており、私が理解しているように、これらはプリンシパルです。
public class Token
{
public int ID { get; set; }
public string Location { get; set; }
public virtual User Contact { get; set; }
}
public class User
{
public int ID { get; set; }
public int TokenID { get; set; }
public string Name { get; set; }
public virtual Token Token { get; set; }
}
したがって、すべてのユーザーには、そのユーザーのみに属するトークンが関連付けられています。また、同様の方法でマッピングする他のオブジェクトに関連する他のトークンもあります。
これまでのところ、以下といくつかのバリエーションを試しましたが、期待どおりに機能しませんでした。User.TokenIDを使用する代わりにUser.IDを使用してToken.IDにマップしているように見えるため、ユーザーの場所が正しくありません。
modelBuilder.Entity<User>()
.HasRequired(p => p.Token)
.WithOptional(p => p.Contact);
マップに使用する列を実際に指定するのが欠けていると思いますか?ここからどこへ行けばいいのかわからない。
以前は、 WithRequired()拡張メソッドを使用するリレーションシップをマッピングするときに、後でHasForeignKey()を指定できましたが、WithOptional()にはこの機能がないようです。