0

これがかなり簡単になることを望んでいましたが、あまり運がありませんでした。私が使用しているデータベースには、ユーザー用のテーブルとトークン用のテーブルがあり、トークンと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()にはこの機能がないようです。

4

1 に答える 1

0

私には理想的ではない解決策がありますが、現時点では問題なく機能しています。

モデルとマッピングを以下に詳述するように変更しました。実際にはそうではありませんが、1対多の関係を指定しています。

public class Token
{
    public int ID { get; set; }
    public string Location { get; set; }

    public virtual List<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; }
}

次に、このマッピング。

modelBuilder.Entity<User>()
    .HasRequired(u => u.Token)
    .WithMany(t => t.Contact)
    .HasForeignKey(u => u.TokenID);
于 2012-10-19T00:32:38.747 に答える