Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架saveChanges不适用于某些实体_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

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

C# 实体框架saveChanges不适用于某些实体,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有这样的数据库结构: User Company CompanyUser CompanyUser有一个UserId和CompanyId列和一个布尔值 用户实体具有此导航项: ICollection<CompanyUser> Companies ICollection<CompanyUser> Users 我不明白为什么没有插入。我已经调试过了,没有异常被抛出或捕获,我不知道。当我查看companyUser包含的内容时,它看起来非常完美 SaveChanges()返

我有这样的数据库结构:

User
Company
CompanyUser 
CompanyUser有一个
UserId
CompanyId
列和一个布尔值

用户实体具有此导航项:

ICollection<CompanyUser> Companies
ICollection<CompanyUser> Users
我不明白为什么没有插入。我已经调试过了,没有异常被抛出或捕获,我不知道。当我查看companyUser包含的内容时,它看起来非常完美

SaveChanges()
返回
0
与每个
CompanyUser
更改,并且
实体的计数始终为
0

在过去的几个小时里,这个实体框架一直困扰着我,我似乎无法理解这个。我做错了什么

更新

以下是插入公司用户的
InsertCompanyUser

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

    this.Entities.Add(entity); 
    this._context.SaveChanges();
}
this.Entities
是一个
IDbSet

My DB Context扩展了DBContext并具有以下方法:

public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
    return base.Set<TEntity>();
}
public new IDbSet()其中tenty:BaseEntity
{
返回base.Set();
}
更新2


CompanyUser
DbSet
始终保留一个0的计数,并且从不增加,但是
Company
用户的
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();

我认为您不必同时设置Company和CompanyId以及User和UserId。只需设置插入的外键值,并设置是否保存。是的,我已经尝试过了。我也尝试过只设置导航属性,但没有成功。您的上下文类是什么样子的?我更新了我的问题,以获得有关上下文和插入方法的信息。我想知道它是否与
公司用户
实体上的
属性有关?我猜你是在
BaseEntity
中定义
Id
,那么当EF将Id作为主键,将
CompanyId
UserId
作为复合键时,它是否会放弃它?如果从
UserId
CompanyId
中完全删除
属性,会发生什么情况?
public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
    return base.Set<TEntity>();
}
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();