只是在玩弄实体框架。
现在我有了一个简单的数据库,其中包含to实体
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文件夹中找到数据库副本。它也不包含关联。但每次我触发更新时,似乎都会写入该文件,如上面的代码所示。
发布于 2013-01-23 22:41:15
我想你应该使用这个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-23 19:28:25
这应该是可行的:
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-23 22:38:54
似乎找到了问题所在:
在连接字符串中,我有|DataPath|,它被设置为运行时的副本。
将DataPath设置为Main函数开头的实际路径,一切似乎都很正常
这可以通过AppDomain.CurrentDomain.SetData("DataDirectory",@“C:\myDB”)来实现;
其中C:\myDB是sdl文件所在的路径。
目前我不知道在部署时该怎么做,也许只需注释掉这一行,将部署路径作为数据库路径即可。
https://stackoverflow.com/questions/14478571
复制相似问题