实体框架saveChanges不适用于某些实体

时间:2014-06-23 21:59:30

标签: c# asp.net-mvc entity-framework

我有这个数据库结构:

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次更改都会返回CompanyUserEntities'次数始终为0

这个实体框架在过去的几个小时里一直让我失望,我似乎无法想象这一点。我做错了什么?

更新

以下是InsertCompanyUser

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

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

this.EntitiesIDbSet<T>

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

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

更新2

DbSet的{​​{1}}始终保留0并且永远不会增加,但CompanyUserCompany User正在增加。调用DbSet

时,为什么DbSet不会增加

1 个答案:

答案 0 :(得分:1)

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

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();