在EF 4.0中使用POCO类插入多个到多个场景

时间:2010-12-24 18:00:36

标签: .net entity-framework-4 poco

我有一个如下数据库模式:

用户 1 ---- * UserRole * ---- 1 角色

我有一个POCO用户和角色类,如下所示:

public class User
{
    public virtual Int64 Id { get; set; }
    public string FullName { get; set; }

    public virtual List<Role> Roles { get; set; }
}

public class Role
{

    public virtual Int64 Id { get; set; }
    public string Name { get; set; }
    public virtual List<User> Users { get; set; }
}

我有一个业务组件类和一个数据访问类来处理业务逻辑和数据访问。

我想将Roles添加到选定的用户,代码如下:

在业务组件中:

    public void AssignRoles(User user, string[] roleIds)
    {
        user.Roles.Clear();
        foreach (string roleId in roleIds)
        {
            Role role = new RolesDataAccess().SelectRoleById(int.Parse(roleId));
            if (role != null)
            {
                user.Roles.Add(role);
            }
        }
        this.SaveUser(user);
    }

    public User SaveUser(User user)
    {   
        if (user.Id == 0)
        {
            return dataAccess.Create(user);
        }
        else
        {
            return dataAccess.Update(user);
        }
    }

在数据访问中:

    public User Update(User user)
    {
        EntityKey key = null;
        object original = null;

        using (DocsFlowContext ctx = new DocsFlowContext())
        {
            key = ctx.CreateEntityKey(User.EntitySetName, user);
            if (ctx.TryGetObjectByKey(key, out original))
            {
                ctx.ApplyCurrentValues(key.EntitySetName, user);
            }
            ctx.SaveChanges();
        }

        return user;
    }

此代码运行时没有任何错误,但它不会将任何数据插入我的UserRole表。有谁对此有所了解?

1 个答案:

答案 0 :(得分:0)

    public class UserRole
    { 
    public virtual User User {get; set;}
    public virtual Role Role {get;set;} 
    }
public class User
{
...
public virtual List<UserRole> UserRoles { get; set;}
}

public class Role
{
...
public virtual List<UserRole> RoleUsers { get; set;}
}

public class User
{
...
public virtual List<Role> Roles { get; set;}
public virtual Role Role { get; set;}
}

public class Role
{
public virtual List<User> Users { get; set;}
public virtual User User { get; set;}
}

第一个解决方案看起来更好,你应该添加 DbSet UserRoles 到您的DbContext

已经过EF CTP5 Poco测试。

祝你好运