0

私は以下のようなQuestとQuestTemplateクラスを持っています

public class Quest{

    public int ID {get;set;}

    public virtual QuestTemplate QuestTemplate {get;set;}

    public string Name{get;set;}
}

public class QuestTemplate{

    public int ID {get;set;}

    public QuestTemplate QuestTemplate {get;set;}

    public string Name{get;set;}

    public virtual Quest Quest{get;set;}
}

実行時に以下のようにQuestとQuestTemplateを作成します

Quest q = new Quest();
q.Name = "Foo";
q.QuestTemplate = new QuestTemplate();
q.QuestTemplate.Name = "Bar";

context.Quests.Add(q);
context.SaveChanges();

クエストオブジェクトとクエストテンプレートオブジェクトを関連するテーブル(この例ではクエスト、QuestTemplates)に追加します。ただし、問題は、テーブル内のクエストテンプレートオブジェクトのQuest_ID列がクエストオブジェクトのIDで設定されていないことです。代わりに、nullのままです。この問題を解決するにはどうすればよいですか?

PS:私は最初にコードでEF5を使用しています。

よろしくお願いします、

ケマル

4

1 に答える 1

0

コードのどこにも、オブジェクトへのQuestTemplate適用を指定していません。Quest次のコードが機能するはずです。

Quest q = new Quest();
q.Name = "Foo";

QuestTemplate qt = new QuestTemplate();
qt.QuestTemplate.Name = "Bar";
qt.Quest = q;

q.QuestTemplate = qt;

context.Quests.Add(q);
context.SaveChanges();

または、1対1の関係をマップすることもできます。

modelBuilder.Entity<Quest >()
    .HasRequred(q => q.QuestTemplate)
    .WithRequiredPrincipal()
    .WillCascadeOnDelete();

編集

今夜これを見て、関係がマッピングされていない理由は、FK名に関するものです。流暢なマッピングでFKを指定すると、関係は期待どおりに機能します。また、このタイプの1対1の関係では、どちらQuestQuestTemplateが必要であるか、または他の前に最初にロードされます(必須フィールドであるため)QuestTemplate。以下でランダムに選択しました。

public class DataContext : DbContext
{
    public DbSet<Quest> Quests { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Quest>()
            .HasOptional(q => q.QuestTemplate)
            .WithRequired(qt => qt.Quest)
            .Map(m => m.MapKey("QuestId"));
    }
}

public class Quest
{
    public int QuestId { get; set; }
    public string Name { get; set; }
    public virtual QuestTemplate QuestTemplate { get; set; }
}

public class QuestTemplate
{
    public int QuestTemplateId { get; set; }
    public string Name { get; set; }
    public virtual Quest Quest { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (DataContext db = new DataContext())
        {
            Quest q = new Quest { Name = "Bar" };
            q.QuestTemplate = new QuestTemplate { Name = "Foo" };
            db.Quests.Add(q);
            db.SaveChanges();
        }
    }
}

Foreign Keys ここのセクションと関係があると思いますが、なぜそうなのかはまだわかりません。FKを識別せずに、まったく同じ方法で構成された他の関係があります。

于 2012-09-11T19:36:36.747 に答える