0

我有 2 个 EF 实体:

public partial class CustomerEntity
{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public virtual ICollection<RoleEntity> Roles { get; set; }
}

public partial class RoleEntity
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
}

这是我的插入方法:

public int? InsertCustomer(CustomerEntity customer)
{
    _context.CustomerEntities.Add(customer);

    try
    {
        return _context.SaveChanges();
    }
    catch (DbEntityValidationException exception)
    {
        return null;
    }
}

这是创建新客户的方法:

public int CreateNewCustomer(string Name)
{
    // Some mapping to CustomerEntity
    var _customerEntity = new CustomerEntity
    {
        CustomerName = Name,
        Roles = new List<RoleEntity>
        {
            new RoleEntity
            {
                RoleId = 1
            }
        }
    };
    return InsertCustomer(_customerEntity);
}

RoleEntity 是一个“查找”表,这意味着它具有预设记录并且永远不会有新记录。

每次创建新的 CustomerEntity 时,它都会有一个或多个角色。如何在不在数据库中创建新角色的情况下插入新的 CustomerEntity?我上面的 CreateNewCustomer 方法将在数据库中插入新客户和新角色,而我只想要其角色引用数据库中现有角色(id 1)的新客户。

4

3 回答 3

2

如前所述,您可以从数据库加载角色并将其添加到客户的Roles集合中,但您也可以将“新”角色用作存根对象(无需进行数据库往返):

public int CreateNewCustomer(string Name)
{
    var role = new RoleEntity { RoleId = 1 };
    AttachEntity(role); // role is "Unchanged" now
    // Some mapping to CustomerEntity
    var customerEntity = new CustomerEntity
    {
        CustomerName = Name,
        Roles = new List<RoleEntity>{ role } // Will not set role to "Added"
    };

    return InsertCustomer(customerEntity);
}

我假设CreateNewCustomer在某种具有DbContext实例的存储库中。AttachEntity除了将实体附加到上下文之外什么都不做:

void AttachEntity<T>(T entity)
{
    this._context.Set<T>().Attach(entity);
}
于 2013-02-20T09:19:44.497 回答
1

您可以从 _content 加载角色实体并将对象分配给 _customerEntity。

public int? InsertCustomer(CustomerEntity customer, int roleId)
{
    var role =_context.Roles.Find(customer);
    _customerEntity Roles = new List<RoleEntity>{ role };
    return _context.SaveChanges();
}
于 2013-02-20T05:55:16.697 回答
1

只需获取RoleEntity您要分配给该客户的内容,然后ICollection直接将其添加给客户。

于 2013-02-20T05:57:35.517 回答