不存储EDM关联

时间:2013-01-23 11:26:34

标签: c# database entity-framework sql-server-ce

只是玩实体框架。

现在我有一个简单的数据库,包含实体

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

效果是:没有任何反应,我也没有看到任何结果 协会表中的新协会。

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

是否有关于使用该概念的良好文档?

CNC中 在bin \ debug文件夹中找到了数据库的副本。 它也不包含关联。但似乎 每当我触发更新时写入该文件 在上面的代码中。

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

似乎发现了问题:

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

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

这可以通过实现 AppDomain.CurrentDomain.SetData(“DataDirectory”,@“C:\ myDB”);

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

目前我不知道如何在部署时如何处理 只需注释掉那条线就足够了,拥有部署路径 作为数据库路径。

答案 2 :(得分: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;
            }