6

Tôi đang gặp một số khó khăn trong việc sử dụng cùng một cơ sở dữ liệu để hợp tác. Đây là kịch bản:Mã MVC/Thực thể-Nhiều bối cảnh đầu tiên với tính toàn vẹn tham chiếu giữa chúng

Trong ứng dụng MVC sử dụng EF 6 Mã-Đầu tiên, có một cơ sở dữ liệu có hai ngữ cảnh. - Ngữ cảnh đầu tiên là bối cảnh ApplicationIdentity với đối tượng ApplicationUser tùy chỉnh. - Bối cảnh thứ hai là bối cảnh kinh doanh, nắm giữ một mô hình Đội bóng:

public class Team 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public ApplicationUser TeamLeader { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<ApplicationUser> TeamMembers { get; set; } 

    public bool IsActive { get; set; } 
} 

Quản lý di cư đã được khó khăn, mặc dù câu trả lời này đã được chứng minh rất hữu ích: Multiple DB Contexts in the Same DB and Application in EF 6 and Code First Migrations

Vấn đề là bối cảnh nhận dạng tiếp tục cố gắng tạo bảng Nhóm trong quá trình di chuyển của nó và sau đó ngữ cảnh Kinh doanh tiếp tục cố gắng tạo bản ghi Người dùng ứng dụng trùng lặp khi nhóm mới được tạo, được điền và lưu.

Những gì tôi muốn là cho các quy tắc sau đây được áp dụng:

  • Các IdentityContext có trách nhiệm tạo và thay đổi giản đồ của chỉ các bảng Identity. Nó không có kiến ​​thức về các đối tượng (hay còn gọi là Team) ngoài phạm vi trách nhiệm của nó.
  • Ngữ cảnh nghiệp vụ chịu trách nhiệm về tính toàn vẹn tham chiếu giữa các đối tượng của nó và IdentityObjects, nhưng nó không thể chỉnh sửa các bản ghi trong bảng Identity. Nếu người dùng không tồn tại, lỗi, không tạo.

Có ai có bất kỳ mẹo nào về cách làm cho các ngữ cảnh này trở nên tốt đẹp với nhau không? Tôi thực sự không muốn phá vỡ tính toàn vẹn tham chiếu giữa các đối tượng Identity và các đối tượng nghiệp vụ.

+0

@Cola không đề nghị từ ngẫu nhiên bolding, điều đó không cải thiện khả năng đọc trong dù sao. – CodeCaster

Trả lời

2

Những gì bạn đang cố gắng thực hiện trông giống như "Ngữ cảnh bị ràng buộc DDD".

Đó là một chút thời gian để giải thích làm thế nào để sử dụng chúng, nhưng đây là một số lời khuyên sau:

  • sử dụng modelBuilder.Ignore<EntityType>(); để loại trừ từ các tổ chức mô hình liên quan của bạn được tự động thêm vào ngữ cảnh của bạn
  • sử dụng các lớp học khác nhau trong mỗi mô hình khi cần thiết và ánh xạ chúng một cách thích hợp. Tôi có nghĩa là các lớp học chỉ ánh xạ một phần của các cột. Sử dụng modelBuilder để cấu hình chúng
  • sử dụng readonly navigation propertiesreadonly properties khi cần thiết

Đây là một bài rất thú vị bởi Julie Lerman: Data Points - Shrink EF Models with DDD Bounded Contexts

+0

Vì vậy, tôi đã làm việc với điều này một chút. Các câu lệnh bỏ qua trong ngữ cảnh nghiệp vụ hoạt động tốt cho việc di chuyển không cố gắng thay đổi lược đồ nhận dạng, nhưng bây giờ nó hoàn toàn bỏ qua chúng. Nó vẫn cần phải tạo ra chìa khóa nước ngoài cho nó. Tôi đã cố gắng làm context.Entity .HasMany (u => u.TeamMembers) và khi cố gắng thực hiện di chuyển mới, nó đang ném một lỗi vì loại bỏ qua. Tôi cần một cách để nói cho bối cảnh kinh doanh của tôi ("Có một bảng người dùng. Không, bạn không thể thay đổi nó. Có, bạn có thể làm cho các phím nước ngoài vào nó, và có bạn nên biết nó.") –

Các vấn đề liên quan