实体框架,更新UPDATE语句与FOREIGN KEY约束“FK冲突

时间:2012-12-20 17:01:39

标签: entity-framework wcf-ria-services silverlight-5.0

我编写了一个Silverlight MVVM(SimpleMVVM工具包)Ria Services App,其中包含从现有DB生成的EntityFramework模型。 首先显示我加载父母的列表父实体的Page的ViewModel,在选择一个之后,我可以进一步转到编辑页面,在那里我做了子实体的menagent。在此之前,我将父实体通过pageDataHelper - 它所拥有的键值对Dictionary传递给Edition Page的ViewModel,并从数据库中刷新它。 接下来,我可以通过实体主键加载,它是ListBox的子项。通过这个,我可以做CRUD的孩子。不幸的是,当我想更新其中一个时,我得到了:

  

UPDATE语句与FOREIGN KEY约束冲突   “FK_Pozycje_Kosztorysy”冲突发生在数据库中   “D:... \ APP_DATA \ EMS.MDF”,表格“dbo.Kosztorysy”,“KosID”栏目。

Aplication在DB中进行更新,但是entityframework始终抛出异常,我处理... db中的两个表都设置了On Update / Delete Cascade。 实体看起来:

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

在ViewModel中;

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

0 个答案:

没有答案