#c# #asp.net-mvc #entity-framework
#c# #asp.net-mvc #entity-framework
Вопрос:
У меня есть такая структура БД:
User
Company
CompanyUser
CompanyUser имеет UserId
CompanyId
столбец and и логическое значение.
Пользовательская сущность имеет этот элемент навигации:
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; }
}
Я могу создавать объекты a User
и a Company
, и они вставляются в базу данных. Но когда я создаю 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
Этот entity Framework бросал меня в течение последних нескольких часов, и я, кажется, не могу понять это. Что я делаю не так?
Обновить
Вот InsertCompanyUser
try
{
if (entity == null)
throw new ArgumentNullException("entity");
this.Entities.Add(entity);
this._context.SaveChanges();
}
this.Entities
является ли IDbSet<T>
Мой контекст БД расширяет DbContext и имеет этот метод:
public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
return base.Set<TEntity>();
}
ОБНОВЛЕНИЕ 2
DbSet
For CompanyUser
всегда сохраняет значение 0 и никогда не увеличивается, но Company
и User
DbSet
s увеличиваются, как и должны. Почему DbSet не увеличивается при вызове Add
Комментарии:
1. Я не думаю, что вам нужно устанавливать как Company, так и CompanyID, а также User и userId. Просто установите значения внешнего ключа для вставки и установите, будет ли он сохранен.
2. Да, я пробовал это. Я также попытался установить только навигационные свойства, и это никуда не делось.
3. Как выглядит ваш контекстный класс?
4. Я обновил свой вопрос, чтобы получить информацию о контексте и методе вставки
5. Мне интересно, имеет ли это какое-то отношение к
Key
атрибутам вашегоCompanyUser
объекта? Я предполагаю, что вы определяетеId
вBaseEntity
so, может ли это отбрасывать его, когда EF находит Id в качестве первичного ключа и находитCompanyId
иUserId
как составные ключи? Что произойдет, если выKey
полностью удалите атрибуты изUserId
иCompanyId
?
Ответ №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();