假设我有很多实体类。我有一个db上下文。
我有一个代码
Person p=new Person();
p.Name="test";请注意,这里没有带上下文的行。
如果context只知道它是EntityObject,我必须如何使用context保存此对象
更新:
if (obj.EntityState == System.Data.EntityState.Detached)
context.AddObject(obj.EntityKey.EntitySetName, obj);但是obj.EntityKey是空的,所以它不能工作
UPDATE2:
我有一个代码:
public static void EntitySave(EntityObject obj)
{
if (obj == null)
throw new ArgumentNullException(obj.GetType().Name, obj.GetType().Name + " не должен быть пустым");
var context = GetSqlConnection();
if (obj.EntityState == System.Data.EntityState.Detached)
context.AddObject(obj.EntityKey.EntitySetName, obj);//there is an exception
context.SaveChanges();
}和另一个:
public static void SaveNewPerson()
{
Person p = new Person();
EntitySave(p);//there is an exception
}那么EntitySave应该如何正确地保存对象呢?或者我可能需要一个助手函数来创建每个实体类?
发布于 2011-05-30 05:47:00
您不能通过单独传递EntityObject来完成此操作,因为新创建的EntityObject没有关于实体集的信息。您可以创建助手函数或助手字典,如下所示
private static Dictionary<Type, string> _entitySets = new Dictionary<Type, string>
{
{ typeof(Person), "Persons"},
{ typeof(Address), "Addresses"}
}
...
public static void EntitySave(EntityObject obj)
{
if (obj == null)
throw new ArgumentNullException("не должен быть пустым");
var context = GetSqlConnection();
if (obj.EntityState == System.Data.EntityState.Detached)
context.AddObject(EntitySets[obj.GetType()], obj);
context.SaveChanges();
}只需检查集合名称是“Person”还是"PersonsSet“
发布于 2011-05-23 18:43:53
仍然不清楚你所说的“上下文不知道对象的类型”是什么意思。上下文必须知道对象的类型,否则它不知道如何映射和持久化对象。对象的类型在EDMX中描述。
如果您只想将对象添加到上下文中,则必须使用以下任一方法:
// You must say the name of EntitySet where you want to add the object
context.AddObject("PersonsSet", person);或者:
// You must call the AddObject method on correct object set
context.CreateObjectSet<Person>().AddObject(person);默认代码生成还提供了特定的方法,如AddPerson或类似的方法。
https://stackoverflow.com/questions/6095348
复制相似问题