2013-01-31 44 views
18

Tôi có hai mã đầu tiên là Foo và FooState trong đó Foo có FooState tùy chọn.Entity Framework Khóa ngoài là Mã khóa chính Đầu tiên

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

    public FooState FooState { get; set; } 
} 

public class FooState 
{ 
    [Key] 
    public int FooStateId { get; set; } 

    [Required] 
    public int State { get; set; } 

    [Required] 
    public Foo Foo { get; set; } 
} 

này hoạt động tốt tuy nhiên khi tôi cố gắng thêm khóa ngoại để FooState như vậy

public class FooState 
{ 
    [Key] 
    public int FooStateId { get; set; } 

    [Required] 
    public int State { get; set; } 

    [ForeignKey("Foo")] 
    [Required] 
    public int FooId 
    public Foo Foo { get; set; } 
} 

Tất cả đều ngã xuống vì FooStateId được thực sự sử dụng FooId vì nó là khóa chính. Điều này có ý nghĩa từ quan điểm cơ sở dữ liệu.

Tuy nhiên, tôi muốn không phải điền một thể hiện của Foo khi lưu bản ghi FooState nhưng vẫn giữ lại thuộc tính bắt buộc.

Điều này sẽ cho phép tôi gửi một FooId và nhà nước trong một dto và không phải lấy toàn bộ đối tượng Foo từ DB nếu tôi muốn thay đổi trạng thái của nó.

Tôi nên thiết lập điều này bằng mã EF trước như thế nào?

Trả lời

26

Tôi nghĩ rằng tôi muốn cung cấp cho một shot này và nó làm việc độc đáo.

public class FooState 
{ 
    [Required] 
    [Key] 
    [ForeignKey("Foo")] 
    public int FooStateId { get; set; } 

    [Required] 
    public int State { get; set; } 

    public Foo Foo { get; set; } 
} 
+8

bạn có thể kết hợp [Key, ForeignKey ("Foo")] – Zakos

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