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 很陌生,所以它可能很简单。

效果是:什么也没发生,我在关联表中看不到任何新的关联。

如何从现有实体添加新关联?

有没有关于使用这个概念的好文档?

-edit- 在 bin\debug 文件夹中找到数据库的副本。它也不包含关联。但似乎每次我触发更新时都会写入该文件,如上面的代码所示。

4

3 回答 3

0

似乎发现了问题:

在连接字符串中我有 |DataPath| 在运行时设置为副本。

在 Main 函数开始时将 DataPath 设置为实际路径,一切似乎都很好

这可以通过 AppDomain.CurrentDomain.SetData("DataDirectory", @"C:\myDB");

其中 C:\myDB 是 sdl 文件所在的路径。

目前我不知道在部署时该怎么做,也许只需注释掉该行就足够了,将部署路径作为数据库路径。

于 2013-01-23T14:38:53.813 回答
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

我猜你应该使用这个SQL Compact, Identity Columns and Entity Framework

            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 回答