với Entity Framework Code-Đầu tiên tôi phải có tất cả các thuộc tính công khai để tạo cơ sở dữ liệu, điều này có nghĩa là sử dụng phương pháp Entity Framework Code-First Tôi buộc phải có một anemic domain trộn với một mô hình phong phú? Bởi vì các thuộc tính không cần phải được công khai, phải được.Sử dụng Mã khung pháp nhân-đầu tiên tôi được yêu cầu phải có mô hình thiếu máu tên miền của mình?
Ví dụ:
Sử dụng một mô hình phong phú, này trong Entity Framework sẽ không làm việc:
public class Car
{
private int _actualPosition;
public void Accelerate()
{
this._actualPosition += 10;
}
}
Để làm việc chúng ta cần phải thực hiện _actualPosition
công cộng:
public class Car
{
public int ActualPosition { get; set; }
public void Accelerate()
{
this.ActualPosition += 10;
}
}
Bây giờ IMO thực thể là xấu xí, bởi vì tôi có một phương thức thêm + 10 trong thuộc tính và công khai nó cùng một lúc, tôi không muốn pr đó operty được công khai.
Một Ví dụ:
Hãy tưởng tượng tôi muốn có một mối quan hệ nhiều-nhiều nhưng với
chỉ có một cách như:
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; }
}
Làm thế nào tôi làm một mối quan hệ nhiều-nhiều với mô hình đó? Theo hiểu biết của tôi không có cách nào tôi sẽ phải làm một mối quan hệ hai chiều:
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; }
}
Với mô hình này, tôi sẽ có thể làm cho nhiều-nhiều mối quan hệ:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany(y => y.Users);
tôi đúng không? Nếu có, Entity Framework không làm hài lòng tôi.
Các "Một ví dụ" làm việc với câu trả lời của @Slauma:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany()
.Map(a =>
{
a.MapLeftKey("UserId");
a.MapRightKey("RoleId");
a.ToTable("UserRoles");
});
Bạn chắc chắn không cần tài sản công cộng tại EF EDMX, vì vậy tôi muốn ngạc nhiên nếu bạn đã làm cho mã EF đầu tiên. Có thực sự không phải là một chú thích hoặc một cái gì đó bạn có thể sử dụng để xác định các thuộc tính mà bạn muốn? Tôi nghĩ rằng bạn chắc chắn cần accessors, mặc dù. Người truy cập được bảo vệ hoặc nội bộ có hoạt động không? (Ban đầu tôi nghĩ rằng riêng tư nhưng tôi nghi ngờ nó cần được bảo vệ ít nhất.) – Rup
@Rup: Không có chú thích nào. Các thuộc tính không phải là công khai nhưng chúng phải được hiển thị cho ngữ cảnh và ánh xạ EF. –
@Ladislav Bạn có đồng ý với EF trong trường hợp đó không? –