с использованием Entity Framework Code-First Мне нужно, чтобы все свойства были общедоступными для создания базы данных, это означает, что с использованием подхода Entity Framework Code-First я вынужден иметь анемичный домен , смешанный с богатой моделью?Поскольку свойства, которые не обязательно должны быть открытыми, должны быть.
Например:
При использовании расширенной модели это в Entity Framework не будет работать:
public class Car
{
private int _actualPosition;
public void Accelerate()
{
this._actualPosition += 10;
}
}
Для работы нам нужно сделать _actualPosition
общедоступным:
public class Car
{
public int ActualPosition { get; set; }
public void Accelerate()
{
this.ActualPosition += 10;
}
}
Теперь Entity IMO ужасен, потому что у меня есть метод, который добавляет + 10 в свойстве и делает его публичным в то же времявремя, я не хочу, чтобы это свойство было общедоступным.
Другой пример:
Представьте, что я хочу отношения многие-ко-многим, но с только в одну сторону как:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
}
Как я могу установить отношения «многие ко многим» с этой моделью?Насколько мне известно, я никак не могу установить двусторонние отношения:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
public IList<User> Users { get; set; }
}
С помощью этой модели я смогу установить отношения многие ко многим:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany(y => y.Users);
Я прав?Если да, Entity Framework меня не радует.
«Другой пример» работает с ответом @ Slauma :
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany()
.Map(a =>
{
a.MapLeftKey("UserId");
a.MapRightKey("RoleId");
a.ToTable("UserRoles");
});