首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不存储EDM关联

不存储EDM关联
EN

Stack Overflow用户
提问于 2013-01-23 19:26:34
回答 3查看 53关注 0票数 1

只是在玩弄实体框架。

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

代码语言:javascript
复制
Person (Id, Name)
Profession (Id, Designation)

它与Id有关联。

我想用下面的代码给一个人一个新的职业:

代码语言:javascript
复制
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文件夹中找到数据库副本。它也不包含关联。但每次我触发更新时,似乎都会写入该文件,如上面的代码所示。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-23 22:41:15

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

代码语言:javascript
复制
            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;
            }
票数 0
EN

Stack Overflow用户

发布于 2013-01-23 19:28:25

这应该是可行的:

代码语言:javascript
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2013-01-23 22:38:54

似乎找到了问题所在:

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

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14478571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档