2010-10-25 39 views
8

theo mặc định Entity Framework ánh xạ nhỏ thành byte.Khuôn khổ thực thể: ánh xạ tinyint thành boolean

tôi đã cố gắng thay đổi loại cơ bản sau khi nó được tạo ra để Boolean, nhưng nhận lỗi biên dịch

Member Mapping quy định là không hợp lệ. Loại 'Edm.Boolean [Nullable = False, DefaultValue =]' của thành viên blah ...

là điều này có thể trong 4.0?

không phải ý tưởng của tôi là sử dụng cột nhỏ xíu như boolean. điều này đã được thực hiện tự động bởi một nhóm khác sử dụng hibernate mà dường như nó theo cách đó cho khả năng tương thích mysql. rõ ràng tinyint có nhiều giá trị hơn 2. Tôi đang tìm kiếm một cách để ánh xạ nó để anyting chấp nhận cho 1 là sai, hoặc bất cứ điều gì chấp nhận cho 0 là đúng sự thật. hoặc sẽ làm việc cho tôi

có cách nào để kết nối với một phiên dịch viên loại EF?

Trả lời

3

Từ trang MSDN về integer types, chúng ta thấy rằng các loại tinyint đại diện cho một số nguyên từ 0 đến 255.

Một bool Ngược lại, chỉ đại diện cho một nhị phân 0 hoặc 1.

Thay đổi ánh xạ mặc định byte-bool (nếu nó thậm chí còn có thể, mà theo this page nó có vẻ như nó không phải) không có ý nghĩa - như thế nào, ví dụ, bạn sẽ đại diện cho giá trị 42 (một hợp lệ tinyint) dưới dạng bool?

Nếu bạn cần một pháp nhân có thuộc tính loại bool, tôi khuyên bạn nên ánh xạ nó tới một cột thuộc loại bit.

+0

đã đồng ý. tôi ghét rằng các int nhỏ được sử dụng để đại diện cho boolean. Rõ ràng điều này đã được thực hiện bằng cách sử dụng hibernate trong java, và tạo ra các trường như tinyint cho mysql compatiblity .. –

+3

Trong các ngôn ngữ cũ, bất kỳ giá trị nào khác 0 được coi là true và 0 được coi là false ... vì vậy chúng là một phần để đổ lỗi :) – Dismissile

+3

Hoàn toàn ngược lại, nó làm cho rất nhiều sence! Nếu bạn không thể thay đổi giản đồ cơ sở dữ liệu (vì bất kỳ lý do gì), thì bạn không có tùy chọn nào khác ngoài việc điều chỉnh ánh xạ. Trừ khi bạn muốn phơi bày một thuộc tính với một ngữ nghĩa boolean như một số nguyên, điều này là xấu. – proskor

4

Thực ra lý do chính tại sao các số nguyên thường được sử dụng trong cơ sở dữ liệu phải do thực tế là nhiều công cụ cơ sở dữ liệu không cho phép lập chỉ mục trên các trường bit. Hầu hết các công cụ cơ sở dữ liệu cố gắng nhóm nhiều trường bit trong một byte nội bộ thành không gian an toàn. Do đó, trường bit không thực sự có sẵn để lập chỉ mục ..

Chuẩn defacto bằng 0 và sai tất cả các giá trị khác bằng true. Tuy nhiên, EF không có hỗ trợ cho loại ánh xạ này. Phương pháp tốt nhất là sử dụng trường bóng riêng tư được khai báo là byte được ánh xạ tới EF. Thứ hai, bạn tạo một thuộc tính bí danh boolean được sử dụng bởi mã của bạn.

Lập bản đồ các thuộc tính riêng tư với EF yêu cầu một số mã phản chiếu.

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