C# 不存储EDM关联
只是在玩实体框架 现在我有了一个简单的数据库,其中包含到个实体C# 不存储EDM关联,c#,database,entity-framework,sql-server-ce,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.Attac
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的新手,所以可能很简单
结果是:什么也没发生,我也没看到
“关联”表中的新关联
如何从现有实体添加新关联
是否有关于使用该概念的良好文档
-编辑-
在bin\debug文件夹中找到数据库的副本。
它也不包含关联。但似乎有
每次启动更新时都会写入该文件
在上面的代码中。这应该可以工作:
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();
}
似乎已经发现了问题: 在连接字符串中,我有| DataPath |,它被设置为副本 在运行时 将数据路径设置为主函数开头的实际路径, 一切似乎都很好 这可以通过以下方式实现: AppDomain.CurrentDomain.SetData(“DataDirectory”,@“C:\myDB”) 其中C:\myDB是sdl文件所在的路径 目前我不知道,也许在部署时该怎么做 只需注释掉那一行就足够了,有了部署路径
作为数据库路径。我想您应该使用这个
非常感谢您的支持!我用dmc.Persons.AddObject尝试过,因为Add不可用。我得到一个UpdateException,其中包含“无法将重复值插入唯一索引。[表名=专业,约束名=PK_专业]更改后的结果现在为0,问题中的代码是1您正在使用的实体框架的哪个版本?它是SQL Server CE数据库(sdl)上的Edmx version=“2.0”非常感谢!我得仔细看看
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;
}