【问题标题】:EF4 Code Only + Ria Services仅 EF4 代码 + Ria 服务
【发布时间】:2010-11-17 19:30:36
【问题描述】:

我认为我可以将我的 DbContext 与 DomainService 一起使用,就像我在任何 MVC 应用程序中使用它一样:

public class DatabaseContext : DbContext
{
    public DbSet<User> Users { get; set; }  
}

public class UserDomainService : DomainService
{
    private DatabaseContext db;

    public UserDomainService()
    {
        db = new DatabaseContext();
    }

    public IQueryable<User> GetUsers()
    {
        return db.Users;
    }

    public void UpdateUser(User user)
    {
        db.Users.Attach(user);
    }

    public void DeleteUser(User user)
    {
        db.Users.Remove(user);
    }
}

问题是,当 Query 工作时,Delete 和 Update 操作会抛出异常,例如:

“无法删除该对象,因为它在 ObjectStateManager 中找不到。”

更新:解决方案

所以这就是我最终要做的。仍然不确定这是否是正确的方法:

public class DatabaseContext : DbContext
{
    public DbSet<User> Users { get; set; }  
    public new Context ObjectContext { get { return base.ObjectContext; } }
}

public class UserDomainService : DomainService
{
    private DatabaseContext db;

    public UserDomainService()
    {
        db = new DatabaseContext();
    }

    public override bool Submit(ChangeSet changeSet)
    {
        bool submitResult = false;

        try
        {
            submitResult = base.Submit(changeSet);
            db.SaveChanges();
        }
        catch
        {
        }

        return submitResult;
    }

    public IQueryable<User> GetUsers()
    {
        return db.Users;
    }

    public void UpdateUser(User user)
    {
        db.Users.Attach(user);

        var stateEntry = db.Context.ObjectStateManager
                                   .GetObjectStateEntry(entity);

        foreach (var propertyName in stateEntry.CurrentValues
                                          .DataRecordInfo.FieldMetadata
                                          .Select(fm => fm.FieldType.Name))
        {
             stateEntry.SetModifiedProperty(propertyName);
        }
    }

    public void DeleteUser(User user)
    {
        db.Users.Attach(user);
        db.Users.Remove(user);
    }
}

【问题讨论】:

    标签: entity-framework wcf-ria-services ef4-code-only


    【解决方案1】:

    该问题似乎与实体在被删除时具有已分离实体状态这一事实有关。
    例如,here 描述了类似问题的解决方案。

    【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多