我正在使用Entity Framework,SQL和C#。
我有一个名为Client的表,其他名为clients_phone。
我有一个带有Xtragrid的表单并使用BindingSource我将IQueryable绑定到网格。
myBindingSource = new BindingSource();
myBindingSource.DataSource = clients; //Clients it is the IQueryable<Client>
myBindingSource.DataMember = "clients_phone";
myBindingSource.AllowNew = true;
然后,我想在我的客户端添加一个新的clients_phone。为此,我创建一个新客户端(),然后添加电话。
clients newclient = objContext.CreateObject<clients>();
newclient.clients_phone = newClients_Phone;
objContext.AddObject("Clients", newclient);
最后我在ObjectContext中添加了新的clients_phone,但是当我看到Xtrag clients_phone没有显示时。
知道会发生什么事吗??。
由于
答案 0 :(得分:2)
Lucas B是对的。每当你想要添加所有新客户端和Clients_phone时,你需要调用SaveChanges()方法以便将数据保存到数据库中。
是否需要先创建客户端,然后执行更新以添加更多client_phone条目或其他任何内容。如果你从未调用过SaveChanges()方法,你所做的任何事情都将被保存回数据库。
答案 1 :(得分:1)
您是否尝试过保存并提交对象?
objContext.SaveChanges(true);
objContext.AcceptAllChanges();
答案 2 :(得分:0)
我已经完成了 SaveChanges(),但我认为这是一种解决方法。
回溯:当用户取消操作时,新对象将在数据库中。
用例:“创建人”
其他方法:为了将新人(尚未提交)添加到GridView控件,您可以将DataSource设置为“当前人+新人”
private object GetBindingList(ObjectSet<Person> contextObjects, Person newObject)
{
List<Person> list = new List<Person>();
list.AddRange(contextObjects);
list.Add(newObject);
return list;
}
用法:
PersonsBindingSource.DataSource = GetBindingList(Context.PersonSet, newPerson);
但这有一个缺点: 它只是第一次工作......所以你需要做类似的事情:
PersonsBindingSource.DataSource = GetBindingList(Context.PersonSet, newPerson);
Context.PersonSet = Populate with persons from PersonsBindingSource.DataSource // ;-)
但是为什么是contextObjects.AddObject(newObject);不工作(新项目不会显示在GridView中 - 只有没有外键到其他对象的对象才会出现问题)
仅在调用 SaveChanges():
时才有效PersonsBindingSource.DataSource = Context.PersonSet.Execute(MergeOption.AppendOnly);