首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保存EntityObject

如何保存EntityObject
EN

Stack Overflow用户
提问于 2011-05-23 17:32:29
回答 2查看 588关注 0票数 0

假设我有很多实体类。我有一个db上下文。

我有一个代码

代码语言:javascript
复制
Person p=new Person();
p.Name="test";

请注意,这里没有带上下文的行。

如果context只知道它是EntityObject,我必须如何使用context保存此对象

更新:

代码语言:javascript
复制
if (obj.EntityState == System.Data.EntityState.Detached)
                context.AddObject(obj.EntityKey.EntitySetName, obj);

但是obj.EntityKey是空的,所以它不能工作

UPDATE2:

我有一个代码:

代码语言:javascript
复制
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();
        }

和另一个:

代码语言:javascript
复制
 public static void SaveNewPerson()
        {
            Person p = new Person();
            EntitySave(p);//there is an exception
        }

那么EntitySave应该如何正确地保存对象呢?或者我可能需要一个助手函数来创建每个实体类?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-30 05:47:00

您不能通过单独传递EntityObject来完成此操作,因为新创建的EntityObject没有关于实体集的信息。您可以创建助手函数或助手字典,如下所示

代码语言:javascript
复制
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“

票数 2
EN

Stack Overflow用户

发布于 2011-05-23 18:43:53

仍然不清楚你所说的“上下文不知道对象的类型”是什么意思。上下文必须知道对象的类型,否则它不知道如何映射和持久化对象。对象的类型在EDMX中描述。

如果您只想将对象添加到上下文中,则必须使用以下任一方法:

代码语言:javascript
复制
// You must say the name of EntitySet where you want to add the object
context.AddObject("PersonsSet", person);

或者:

代码语言:javascript
复制
// You must call the AddObject method on correct object set
context.CreateObjectSet<Person>().AddObject(person);

默认代码生成还提供了特定的方法,如AddPerson或类似的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6095348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档