2013-01-23 38 views
1

只是玩弄實體框架。EDM協會不存儲

現在我有一個簡單的數據庫,包含對實體

Person (Id, Name) 
Profession (Id, Designation) 

這對標識的關聯。

我希望通過編程給人一個新的職業與此代碼:

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文件夾中找到了數據庫的副本。 它也不包含關聯。但似乎 被寫入該文件,每次我在上面的代碼中更新爲 。

+0

是什麼版本? – spajce

+0

它是SQL Server CE數據庫(sdl)上的Edmx Version =「2.0」 –

回答

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; 
      } 
+0

你非常需要!仔細看看 –

+0

@MareInfinitus不要忘記標記我的答案爲已接受,歡迎!:D – spajce

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(); 
} 
+0

非常感謝!我試着用dmc.Persons.AddObject,因爲Add不可用。我得到一個UpdateException,「重複值不能插入到一個唯一的索引中[表名=專業,約束名= PK_Professions] –

+0

結果現在爲0,並且問題代碼爲1 –

0

似乎已經發現了問題:

在連接字符串我有|數據路徑|在運行時將其設置爲副本 。

在主函數的開始設置數據通路到實際路徑, 一切似乎是罰款

這可以用 AppDomain.CurrentDomain.SetData(「DataDirectory目錄」來實現,@「C:\ MYDB「);

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

此刻,我不知道,該怎麼辦有關部署上,或許 是不夠的,只是註釋掉該行隨後,具有部署路徑 數據庫路徑。