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