0

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

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

银光代码:

//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.

有趣的是,我根本没有修改 Data 对象,它们确实带有一个 Id 和客户端上的所有其他内容。

如果有人能指出我做错的方向,我将不胜感激!!!

谢谢 Martin, aka <bleepzter/>

4

1 回答 1

2

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

改变这个:

    this.ObjectContext.Attach(dataItem);

对此:

    this.ObjectContext.Data.AttachAsModified(dataItem)

根据您的设置,ObjectContext 上的数据可能是复数形式。

于 2012-04-06T01:20:55.283 回答