Silverlight,EF4,WCF RIA:具有null EntityKey值的对象无法附加到对象上下文?

时间:2012-04-06 00:00:09

标签: c# silverlight entity-framework silverlight-4.0 wcf-ria-services

首先,我想感谢大家的努力和投入。 Stack Overflow一直是我的首选资源,我觉得我在这个论坛上学到的东西比我大学的整整4年都多!

所以问这个问题。我有一个使用EF和WCF RIA的Silverlight 4项目。 在我的一个页面中,我通过Ria Web服务调用检索表的内容,并将结果存储在ObservableCollection<T>

SILVERLIGHT CODE:

//class variables;
public ObservableCollection<Data> DataSource { get; set; }   //Data entity
public ApplicationDomainContext Context { get; set; } //Ria Service

...
EntityQuery<Data> query = this.Context.GetDatasQuery();
this.Context.Load(query, loadedCallBack =>
{
   if( loadedCallBack.HasError )
   {
       loadedCallBack.MarkErrorAsHandled();
       MessageBox.Show("Unable to retrieve the desired data...");
       return;
   }

   this.DataSource = new ObservableCollection<Data>(loadedCallback.Entities);
}

...
private void CreateUserAction()
{
    string userName = WebContext.Current.User.Name;
    this.Context.CreateUserAction(userName, this.DataSource, callBack =>
    {
        if(callBack.HasError)
        {
            callBack.MarkErrorAsHandled();
            MessageBox.Show("Error creating user action");
            return;
        }
    }
}

服务代码:

public partial class ApplicationDomainService :  LinqToEntitiesDomainService<ApplicationDomainModel> 
{
    [Invoke]
    public void CreateUserAction(string userName, IEnumerable<Data> dataItems)
    {
        foreach(Data dataItem in dataItems)
        {
            if( dataItem.EntityState == EntityState.Detached )
            {
                this.ObjectContext.Attach(dataItem); //ERROR???
            }
        } 
    }
}

所以代码执行到if( dataItem.EntityState == EntityState.Detached)内部并在我尝试附加对象时给出错误:

An object with a null EntityKey value cannot be attached to an object context.

有趣的是,我根本不修改数据对象,它们确实带有Id和客户端的其他所有内容。

如果有人能指出我做错的方向,我会非常感激!!!!

由于 Martin, aka <bleepzter/>

1 个答案:

答案 0 :(得分:2)

我还没有使用最新版本的RIA和EF,但您可能需要尝试以下更改:

改变这个:

    this.ObjectContext.Attach(dataItem);

对此:

    this.ObjectContext.Data.AttachAsModified(dataItem)

根据您的设置,ObjectContext上的数据可能会多元化。