1

エンティティフレームワークをいじってみてください。

これで、エンティティを含む単純なデータベースができました。

Person (Id, Name)
Profession (Id, Designation)

Idに関連付けがあります。

このコードを使用して、プログラムで新しい職業を人に提供したいと思います。

using (PersonDataModelContainer dmc = new PersonDataModelContainer())
{
    var pers = new Person() { Id = PersonId };
    dmc.Person.Attach(pers);
    var prof = new Profession() { Id = ProfessionId };
    dmc.Profession.Attach(prof);
    pers.Professions.Add(req);

    var result = dmc.SaveChanges();

    return (result > 0);
};

私はEFにまったく慣れていないので、おそらく非常に簡単です。

効果は次のとおりです。何も起こらず、アソシエーションテーブルに新しいアソシエーションが表示されません。

既存のエンティティから新しい関連付けを追加するにはどうすればよいですか?

その概念を扱う上で良いドキュメントはありますか?

-編集-bin\debugフォルダーにデータベースのコピーが見つかりました。関連付けも含まれていません。しかし、上記のコードのように、更新を起動するたびにそのファイルへの書き込みがあるようです。

4

3 に答える 3

0

これは機能するはずです:

using (PersonDataModelContainer dmc = new PersonDataModelContainer())
{
    var pers = new Person() { Id = PersonId };
    var prof = new Profession() { Id = ProfessionId };
    pers.Professions.Add(prof);

    dmc.Persons.Add(pers);
    var result = dmc.SaveChanges();
}
于 2013-01-23T11:28:24.923 に答える
0

問題を見つけたようです:

接続文字列には|DataPath|があります これは実行時にコピーに設定されます。

Main関数の先頭でDataPathを実際のパスに設定すると、すべてが正常に見えます

これは、AppDomain.CurrentDomain.SetData( "DataDirectory"、@ "C:\ myDB");を使用して実現できます。

ここで、C:\ myDBは、sdlファイルが存在するパスです。

現時点では、展開時にそれをどうするかわかりません。おそらく、展開パスをデータベースパスとして、その行をコメントアウトするだけで十分です。

于 2013-01-23T14:38:53.813 に答える
0

このSQLCompact、Identity Columns、EntityFrameworkを使用する必要があると思います

            using (var con = new PersonDataModelContainer())
            {
                var pers = new Person() { Id = PersonId };

                int pId = 0;
                if (pers.PersonId > 0)
                {
                    pers = con.Persons.FirstOrDefault(c => c.PersonId == pers.PersonId);
                    pId = pers.pId;
                }
                else
                    pId = con.Users.NextId(c => c.PersonId) + 1;

                if (pers.UserId == 0)
                    con.Persons.AddObject(pers);
                con.SaveChanges();
                pId = Persons.PersonId;


                var prof = new Profession() { Id = ProfessionId, PersonId = pId };

                int profId = 0;
                if (prof.PersonId > 0)
                {
                    prof = con.Professions.FirstOrDefault(c => c.ProfessionId == prof.ProfessionId);
                    profId = prof.PersonId;
                }
                else
                    profId = con.Professions.NextId(c => c.ProfessionId) + 1;

                if (prof.ProfessionId == 0)
                    con.Professions.AddObject(prof);
                con.SaveChanges();
                prof.ProfessionId = profId;
            }
于 2013-01-23T14:41:14.967 に答える