我编写了一个 Silverlight MVVM(SimpleMVVM 工具包)Ria 服务应用程序,其中包含从现有数据库生成的 EntityFramework 模型。首先是显示列表父实体的页面的 ViewModel 我加载了父母,选择一个后,我可以进一步转到编辑页面,在那里我对子实体进行管理。在此之前,我通过 pageDataHelper - 它所拥有的键值对字典将父实体传递给 Edition Page 的 ViewModel,并从数据库中刷新它。接下来,我可以通过实体主键加载,它是 ListBox 的子项。通过这个,我可以对孩子做 CRUD。幸运的是,当我想更新其中一个时,我得到了:
UPDATE 语句与 FOREIGN KEY 约束“FK_Pozycje_Kosztorysy”冲突 冲突发生在数据库“D:...\APP_DATA\EMS.MDF”、表“dbo.Kosztorysy”、列“KosID”中。
应用程序在数据库中进行更新,但实体框架总是抛出异常,我处理...数据库中的两个表都设置了更新/删除级联。实体看起来:
internal sealed class KosztorysMetadata
{
public int KosID { get; set; }//Primary Key
public EntityCollection<Pozycja> Pozycje { get; set; } //Childs
}
}
internal sealed class PozycjaMetadata
{
public int KosID { get; set; }// Foreign Key
public int PozID { get; set; }//Primary Key
}
}
在 App.Web 中,获取实体的函数:
public IQueryable<Kosztorys> GetKosztorysByID(int id)
{
var query = from k in this.ObjectContext.Kosztorysy
where k.KosID==id
select k;
return query;
}
public IQueryable<Pozycja> GetPozycjeGlowne(Int32 id)
{
var query = from k in this.ObjectContext.Pozycje
where k.KosID == id && (k.NadPozID == null || k.TypRMS == 0 || k.TypRMS == TypRMSBVals.Dzial)
select k;
return query;
}
在视图模型中;
class KosztorysViewModel{
public Kosztorys WybranyKosztorys
{
get { return wybranyKosztorys; }
set{ WybranyKosztorys = value;}}
private ObservableCollection<Kosztorys> kosztorysy;
public ObservableCollection<Kosztorys> Kosztorysy{}}
public void OdsiwezKosztorys()//Refresh parent
{ this.serviceAgent.PobKosztorys(WybranyKosztorys.KosID, (encje, ex) => { kosztorysOdswiezony(encje, blad); });
}
void kosztorysOdswiezony(List<Kosztorys> encje, Exception exc) //Refreshed Parent
{ Kosztorysy = new ObservableCollection<Kosztorys>(encje);
WybranyKosztorys = Kosztorysy[0];}
public void PobDzialy()
{
if (WybranyKosztorys != null)
{
this.serviceAgent.PobGlownePozycje(WybranyKosztorys.KosID, (encje, ex) => dzialyPobrane(encje, ex));
}
}
void dzialyPobrane(List<Pozycja> encje, Exception exc) //callback
{
Dzialy.Clear();
Dzialy = new ObservableCollection<Pozycja>(encje);
}}
怎么了?我使用 ;EF4.3、Silverlight 5、MS SQL Server 2008R