首先,我想感谢大家的努力和投入。 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/>
答案 0 :(得分:2)
我还没有使用最新版本的RIA和EF,但您可能需要尝试以下更改:
改变这个:
this.ObjectContext.Attach(dataItem);
对此:
this.ObjectContext.Data.AttachAsModified(dataItem)
根据您的设置,ObjectContext上的数据可能会多元化。