2015-03-26 16 views
10

Lần đầu tiên tôi chuyển đổi EF5 DB thành mã EF6. trong thiết lập cũ có một số FK là byte. và trong ứng dụng được ánh xạ tới các enums với loại byte gạch dưới. điều này đã làm việc tuyệt vời.Cột khóa ngoài có thể là mã Enum trong Entity Framework 6 trước không?

Chuyển sang mã đầu tiên và EF6 Tôi nhận thấy rằng các enums sẽ "chỉ hoạt động" và thực sự dường như là trường hợp cho các cột thông thường. Tôi chỉ có thể đi từ này

public byte FavPersonality {get;set;} 

này:

public Personality FavPersonality {get;set;} 

nhưng khi nói đến cột đó cũng là chìa khóa ngoại tôi nhận được lỗi này:

System.ArgumentException : The ResultType of the specified expression is not 
compatible with the required type. The expression ResultType is 'Edm.Byte' 
but the required type is 'Model.Personality'. 

Liệu đó có phải không thể được thực hiện với EF6 + Code đầu tiên?

chỉnh sửa:

enum được định nghĩa là: byte

+1

Enum của bạn có được xác định bằng ": byte" sau tên không? –

Trả lời

1

Tôi cũng đã nhận lỗi:

The ResultType is MyEnum of the specified expression is not compatible with the required type 'Edm.Int32'. Parameter name: keyValues[0]

Khi sử dụng các bản đồ liệt kê:

[Column("MyActualFKColumnId", TypeName = "int")] 
public MyEnum MyEnum { get; set; } 

// NB : Foreign Key refers to the C# Property, not the DB Field 
[ForeignKey("MyEnum")] 
public MyEntityReferencedByEnum MyEntityReferencedByEnum { get; set; } 

Tuy nhiên, tôi đã có thể làm việc xung quanh bằng cách khôi phục khóa ngoại nguyên ban đầu (MyActualFKColumnId), Loại bỏ các [Column][ForeignKey] thuộc tính, và sau đó thêm một [NotMapped] tài sản hack để lớp:

3

Tôi chỉ chạy vào cùng một vấn đề này với enum của tôi là một số enum cơ bản, nhưng điều này đã đưa ra như là người đầu tiên dẫn đến tìm kiếm bằng tin nhắn. Tôi đã có một subtype trên đối tượng chính của tôi, nơi các giá trị là một tập hợp các giá trị cố định. Nhưng, cũng có những đồ vật cho những người để chúng tôi có thể viết các truy vấn chống lại họ.

public class Foo { 
    [Key] 
    public int Id { get; set; } 

    public BarEnum BarId { get; set; } 

    [ForeignKey(nameof(BarId))] 
    public Bar Bar { get; set; } 
} 

public class Bar { 
    [Key] 
    public int Id { get; set; } 
} 

public enum BarEnum { 
    Type1, 
    Type2 
} 

Cấu hình này đã cho tôi được thông báo lỗi tương tự như mô tả trong câu hỏi này:

The ResultType of the specified expression is not compatible with the required type. The expression ResultType is 'BarEnum' but the required type is 'Edm.Int'.

Độ phân giải cho điều này rất đơn giản: Chỉ cần thay đổi Id của Bar sử dụng enum là tốt, và tất cả mọi thứ đã làm việc mà không có vấn đề gì. Điều này có ý nghĩa, vì có đến nay nhiều giá trị hơn có thể cho một số int hơn là dành cho BarEnum.

public class Bar { 
    [Key] 
    public BarEnum Id { get; set; } 
} 
+0

Đã lâu rồi và mã của tôi đã biến mất, nếu ai đó có thể xác nhận rằng điều này trả lời câu hỏi tôi sẽ đánh dấu nó. – user1852503

+0

Không thành vấn đề. Như tôi đã nói, đây là kết quả hàng đầu khi tôi tìm kiếm văn bản lỗi. Săn lùng tất cả những nơi mà Phím Ngoại đang được sử dụng là một việc vặt, nhưng một khi tôi đã làm, nó hoạt động như một sự quyến rũ. – krillgar

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