Используя код Entity Framework, я должен сначала иметь модель мой домен анемичен?

с 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");
            });

9
задан Acaz Souza 25 August 2011 в 20:15
поделиться