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