2011-02-04 32 views
5

Tôi có hai dự án:Tên EntityContainer phải là duy nhất trong các assembly khác nhau?

  • News.Data
  • Tags.Data

Cả hai xác định Entities. Khi tôi cố gắng thực hiện

using (var db = new News.Data.Entities("name=Entities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=Entities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

trên một ứng dụng giao diện điều khiển tôi nhận được lỗi này:

Schema specified is not valid. Errors: Model1.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined.

Có thể sử dụng

News.Data.Entities 
Tags.Data.Entities 

thay vì

News.Data.NewsEntities 
Tags.Data.TagsEntities 

?

Trả lời

4

connectionStrings được cấu hình ở mức ứng dụng, và các containername đóng vai trò như một định danh duy nhất. Hoặc thay đổi containerNames thành một giá trị duy nhất, hoặc reimplement các constructor mặc định của ObjectContext để có lẽ tra cứu một Setting, có thể được cấu hình ở cấp độ lắp ráp.

Edit: Khi tạo một thể hiện của một ObjectContext, News.Data.Entities trong ví dụ này, các lớp cơ sở của ngữ cảnh của bạn thường được xây dựng với một ContainerName. Tham số này cung cấp cho tất cả các thông tin cần thiết để tạo kết nối cửa hàng của mình và thực hiện tất cả các hoạt động lập bản đồ của nó.

Về cơ bản, liên kết được thực hiện giữa loại ObjectContextContainerName. Khi instantiating bối cảnh thứ hai của bạn Tags.Data.Entities, đó là một loại khác nhau, nó sẽ cố gắng kết hợp các loại với container và đây là những gì ném ngoại lệ, vì bạn không thể liên kết cùng một ContainerName hai lần.

Để giải quyết vấn đề, nếu có thể, điều tốt nhất là tạo lại EDMX, với các tên vùng chứa khác nhau. Nếu xóa không phải là một tùy chọn, bạn có thể sửa đổi tham số ContainerName trong trình thiết kế, sau đó mở khóa edmx trong notepad và tìm 'EntitiesModelStoreContainer' và thay đổi phần 'Entities' thành bất kỳ ContainerName mới nào của bạn.

Hy vọng điều này sẽ giúp ...

+0

Kết nối không phải là vấn đề, tên lớp là – BrunoLM

+0

Tôi biết, nhưng vùng chứa cũng phải là duy nhất Ở cấp độ ứng dụng, bạn có hai thùng chứa với cùng một '' ContainerName'. Thực tế là nó cho bạn một va chạm trong cấu hình sẽ là đầu mối đầu tiên của bạn. = tên container) thông qua hàm tạo của nó –

+0

Phần hữu ích nhất của các câu trả lời ở trên là chi tiết về việc mở EDMX trực tiếp trong notepad. Visual Studio không cập nhật EDMX đúng cách chỉ bằng c treo tên vùng chứa trong ngăn thuộc tính VS. Câu trả lời trước cho các câu hỏi tương tự đã không chỉ ra chi tiết này. –

0

Tôi lấy nó, bạn đã thử điều này:

using (var db = new News.Data.Entities("name=NewsEntities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=TagEntities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

Vấn đề của bạn là hai dự án có tên chứa cùng một thực thể. Bạn cần phải thay đổi (ít nhất) một trong số họ.

Chỉnh sửa: Xin lỗi, để trả lời câu hỏi chính xác của bạn ... Không!

Is it possible to use

News.Data.Entities 
Tags.Data.Entities 

instead of

News.Data.NewsEntities 
Tags.Data.TagsEntities 
+0

Tôi đang sử dụng cùng một 'chuỗi kết nối'.' BrunoLM

+0

Ah, tôi hiểu ... tên = một phần của hàm dựng là chuỗi kết nối để sử dụng. – Odhran

+0

Ok , như tôi đã nói, bạn cần phải có tên vùng chứa thực thể khác nhau Đổi tên chúng như bạn đã đề xuất cho NewsEntites và TagEntities – Odhran

0

Sự cố có thể không phù hợp với logic của bạn. Đôi khi tôi gặp phải điều này khi tôi chuyển đổi giữa các cấu hình xây dựng. Để khắc phục nó, tôi xóa tất cả các tệp tạm thời và tạo một bản dựng sạch.

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