只是玩实体框架。
现在我有一个简单的数据库,包含实体
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文件夹中找到了数据库的副本。 它也不包含关联。但似乎 每当我触发更新时写入该文件 在上面的代码中。
答案 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;
}