2011-01-27 34 views
7

Tôi đang cố gắng tạo mô hình của mình trong Khung thực thể và tôi đang cố gắng sử dụng nó bằng cách sử dụng tùy chọn mã đầu tiên.Mã khung đối tượng mối quan hệ lớp học đầu tiên

Tôi hiện có 3 bảng trong cơ sở dữ liệu của mình. Bảng trạng thái của tôi có tất cả trạng thái được sử dụng trên ứng dụng web. Tôi có một bảng tin. Và tôi có một bảng trạng thái tin tức. Lý do tại sao tôi đã làm như thế này là bởi vì tôi không muốn tất cả các trạng thái có sẵn cho các mục tin tức, chỉ cần một vài trong số họ. Vì vậy, 3 bàn của tôi sẽ giống như thế này:

Tin tức Bảng:

NewsId int required primary key 
Title varchar required 
Body varchar required 
NewsStatusId int required foreign key 

NEWSTATUS Bảng:

NewsStatusId int required primary key 
StatusId int required foreign key 

Status Table

StatusId int required primary key 
Name varchar required 

Khi tạo các lớp học cho điều này, làm Tôi cần tạo lớp học cho Tin tức, Trạng thái và NewsStatus? Tôi đã suy nghĩ chỉ cho Tin tức và tình trạng? Mối quan hệ của tôi sẽ như thế nào giữa 2/3 lớp học?

My Tin tức lớp trông giống như lớp Status

public class News 
{ 
    public int NewsId { get; set; } 
    // rest of my properties 
    public int StatusId { get; set; } 
} 

này:

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 
} 

các lớp này sẽ trông như thế nào với mối quan hệ giữa 2/3 lớp học?

Bất kỳ mẫu mã nào cũng sẽ được đánh giá cao.

Trả lời

6

bạn không thực sự cần bất kỳ API thông thạo cho một Nhiều-to-Nhiều hiệp hội cơ bản giữa Tin tức và Trạng thái. Mọi thứ sẽ được suy ra bởi Code First dựa trên các quy ước. Điều đó nói rằng, chúng tôi có thể tùy chỉnh lược đồ DB của bạn với API thông thạo dựa trên các yêu cầu của bạn.

public class News 
{ 
    public int NewsId { get; set; } 
    public string Title { get; set; } 

    public ICollection<Status> Statuses { get; set; } 
} 

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 

    public ICollection<News> Newses { get; set; } 
} 

public class Ctp5Context : DbContext 
{ 
    public DbSet<News> Newses { get; set; } 
    public DbSet<Status> Statuses { get; set; } 
} 

Xin lưu ý rằng trong một Nhiều người đến Nhiều hiệp hội như thế này, có được sẽ không phải là một NewsStatusId như một khoá ngoại trên Tin tức lớp, thay vào đó, một chìa khóa nước ngoài NewsId sẽ hiển thị trên bảng liên kết tham khảo bảng PK trên News. Nếu bạn thực sự cần có một lớp học NewsStatusId trên lớp Tin tức, thì chúng tôi phải chia liên kết này thành 2 liên kết một-nhiều, điều này có nghĩa là chúng tôi có 3 thực thể chứ không phải 2.

+0

Cảm ơn. Tôi vẫn cần bảng NewsStatus? Tôi không biết cách liên kết được thực hiện từ bảng NewsStatus đến bảng Trạng thái và Tin tức như thế nào? Hay tôi có sai ở đây không? Cấu trúc bảng trông như thế nào? –

+1

Có, bạn cần nó nhưng nó sẽ được tự động tạo và quản lý bởi EF. Mô hình logic của bạn không có một thực thể như NewsStatus. Bảng nối kết trong mối quan hệ Nhiều - Nhiều sẽ chỉ chứa * các khóa ngoại từ kết thúc kết thúc (tức làCác bảng Status và News) hoặc bạn phải chia nhỏ nó thành 2 thành nhiều liên kết, do đó giới thiệu một thực thể mới như NewsStatus để giữ các khóa ngoài cũng như bất kỳ các thuộc tính bắt buộc nào khác. Mã tôi đã cho thấy trong câu trả lời của tôi đi theo cách đầu tiên. Hãy cho tôi biết nếu bạn cần làm điều đó theo cách thứ hai và tôi sẽ chỉ cho bạn cách nó được thực hiện. –

+0

Trong mô hình đối tượng của tôi, mối quan hệ giữa Tin tức và Trạng thái là gì? 1 đến M? Bạn đã có một số mã về cách thực hiện đầy đủ điều này? Tôi vẫn chưa sử dụng mã hội đồng đầu tiên của EF, có bất kỳ hướng dẫn phong nha nào. Ngay cả mẫu mã của Craig dưới đây cũng mới đối với tôi. –

1

Chỉ NewsStatus. Bạn muốn viết một cái gì đó như:

modelBuilder.Entity<News>() 
    .HasMany(n => n.Statuses) 
    .WithMany(s => s.News); 

(Điều chỉnh pluralizations theo ý thích của bạn.)

+0

ModelBuilder là gì và tôi sẽ đặt ở đâu nó? Xem bài đăng cập nhật của tôi. Cảm ơn. –

+0

Tôi vẫn không hiểu làm thế nào mã này sẽ liên kết lên 3 bảng của tôi? Bạn có thêm một số mã cho tôi hoặc các liên kết để đọc và đọc mã của bạn không? –

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