我有这个数据库结构:

User
Company
CompanyUser


CompanyUser具有UserIdCompanyId列以及一个布尔值。

用户实体具有以下导航项:

ICollection<CompanyUser> Companies


公司有一个导航项目:

ICollection<CompanyUser> Users


CompanyUser看起来像这样:

public class CompanyUser : BaseEntity
{
    /// <summary>
    /// Gets or sets if the user is an admin
    /// </summary>
    public bool IsAdmin { get; set; }

    /// <summary>
    /// gets or sets the company id
    /// </summary>
    public Guid? CompanyId { get; set; }

    /// <summary>
    /// gets or set the user id
    /// </summary>
    public Guid? UserId { get; set; }

    public User User { get; set; }
    public Company Company { get; set; }
}


我可以创建一个UserCompany实体,并将它们插入数据库中。但是,当我像这样创建CompanyUser时,它根本不会插入。

User user = new User();
// Set properties
_userService.InsertUser(user);

Company company = _companyService.GetCompanyById(i);
CompanyUser companyUser = new CompanyUser()
{
    IsAdmin = true,
    CompanyId = company.Id,
    UserId = user.Id
};

_companyService.InsertCompanyUser(companyUser);


我不明白为什么不插入。我已经调试了它,没有抛出任何未知的异常。当我查看companyUser包含的内容时,它看起来非常完美。

SaveChanges()每次更改0都会返回CompanyUser,并且Entities'计数始终为0

在过去的几个小时中,这个实体框架一直困扰着我,我似乎无法弄清楚这一点。我究竟做错了什么?

更新

这是InsertCompanyUser

try
{
    if (entity == null)
        throw new ArgumentNullException("entity");

    this.Entities.Add(entity);
    this._context.SaveChanges();
}


this.EntitiesIDbSet<T>

我的数据库上下文扩展了数据库上下文,并具有以下方法:

public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
    return base.Set<TEntity>();
}


更新2

DbSetCompanyUser始终保持计数0,并且从不增加,但是CompanyUser DbSet随其应有的增加。为什么在调用Add时DbSet不会增加

最佳答案

检查您的对象模型正在使用主键/外键生成与表正确相关的表,然后尝试以下方法:

User user = new User();
// Set properties

Company company = _context.Companies.Find(i);
CompanyUser companyUser = new CompanyUser()
{
    IsAdmin = true,
    User = user
};

company.Users.Add(companyUser);
_context.SaveChanges();

关于c# - Entity Framework saveChanges不适用于某些实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24375255/

10-10 19:16