2012-04-06 15 views
9

Tôi đang thực hiện dự án đầu tiên của mình với EF và tôi đang lên kế hoạch để đi mô hình mã đầu tiên. Tôi đang cố gắng tìm một chút hướng dẫn về việc xử lý một kịch bản "tra cứu bảng" khá cổ điển.Thực tiễn tốt nhất cho bảng tra cứu trong mã EF-First

Tôi đang xử lý một tình huống khá hợp lý nơi tôi sẽ kiên trì dữ liệu địa chỉ. Vì vậy, tôi có một địa chỉ đơn giản DTO ...

public class Address 
    { 
     public int Id { get; set; } 
     public virtual string StreetAddress1 { get; set; } 
     public virtual string StreetAddress2 { get; set; } 
     public virtual string City { get; set; } 
     public virtual string State { get; set; } 
     public virtual string ZipCode { get; set; } 
    } 

Trong thuộc tính tiểu bang, tôi muốn lưu trữ mã tiểu bang hai chữ cái chuẩn của Hoa Kỳ. Đối với mục đích xác nhận, tôi muốn có một mối quan hệ khóa ngoài một tiêu chuẩn giữa bảng Địa chỉ kết quả và bảng tra cứu trạng thái khá chuẩn. Bảng đó có lẽ sẽ chứa một ID, mã gồm hai chữ cái và cột thứ ba chứa tên đầy đủ của tiểu bang.

Tôi hy vọng sẽ sử dụng bảng tra cứu trạng thái này để điền vào và các hộp kiểu thả xuống trạng thái, v.v ... và cũng hoạt động như một sự xác thực cho Nhà nước được đệ trình trong thực thể địa chỉ. Những thứ khá phổ biến. Vì vậy, tôi có một vài câu hỏi đơn giản (tôi hy vọng).

  1. Tôi có cần phải tạo ra một thực thể để đại diện cho tổ chức nhà nước chỉ để đã EF tạo bảng, hoặc tôi có thể chỉ bao gồm bảng quá trình tạo trong một chiến lược DBCreation và gieo rắc nó ở đó? Bạn có thể tạo ra thực thể đó, chỉ để sử dụng làm mô hình "xem " cho bất kỳ nơi nào tôi muốn hiển thị "bộ chọn tiểu bang"
  2. Tôi thực sự chỉ muốn lưu trữ mã trạng thái hai chữ cái trong địa chỉ thực thể, nhưng điều này có ý nghĩa hay không có ý nghĩa hơn với chỉ biến nó thành thuộc tính điều hướng cho một thực thể nhà nước và sau đó hiển thị?

Tôi gặp khó khăn một chút với việc nêu rõ quan điểm của mình ở đây, vì vậy nếu tôi không rõ ràng, vui lòng hỏi chi tiết hơn.

Xin cảm ơn trước. thích hợp trong giao diện người dùng?

+0

3- Tôi thường sử dụng một thực thể cho điều đó chỉ vì nó có thể tránh được lỗi chính tả của người dùng. Tôi cũng đảm bảo tính nhất quán nếu bạn sử dụng nó trong nhiều thực thể (bây giờ hoặc sau này). Nhưng nếu ứng dụng của bạn khá nhỏ hoặc bạn không cần xác thực quá nhiều, tôi không thấy nhiều dấu hiệu phản đối để trực tiếp đặt hai chữ cái trực tiếp vào thực thể Địa chỉ của bạn. – Mathieu

Trả lời

7
  1. tôi sẽ làm cho tình trạng đó là lớp riêng và một tài sản chuyển hướng của địa chỉ.
public class Address 
{ 
    public int Id { get; set; } 
    public virtual string StreetAddress1 { get; set; } 
    public virtual string StreetAddress2 { get; set; } 
    public virtual string City { get; set; } 
    public virtual USState State { get; set; } 
    public virtual string ZipCode { get; set; } 
} 

public class USState 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public string Text { get; set; } 
} 

Với mã EF đầu tiên sẽ tạo ra bảng, nhưng bạn có thể cư nó trong phương pháp Seed().

  1. Bạn không nhất thiết phải sử dụng các kiểu xem, nhưng bạn nên sử dụng chế độ xem được chia sẻ để hiển thị các trạng thái trong biểu mẫu chỉnh sửa. Bạn không đề cập đến MVC, nhưng nếu bạn sử dụng, sau đó nó đơn giản như đặt
[UIHint("StatePicker")] 
public virtual USState State { get; set; } 

trong poco hoặc xem bạn mô hình - tùy thuộc vào những gì nhìn của bạn sử dụng. Sau đó, trong Views/Shared/EditorTemplates, thêm một cái nhìn cục bộ StatePicker.cshtml, mà sẽ looke cái gì đó như

@inherits System.Web.Mvc.WebViewPage<USState> 
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll, 
    "Id", 
    "Name", 
    Model==null?1:Model.Id), 
    "Choose--") 

kết hợp với

@Html.EditorFor(m => m.State) 

theo quan điểm của bạn.

  1. Thuộc tính điều hướng. Db của bạn sẽ lưu trữ các USState id như một khóa nước ngoài, nhưng ứng dụng của bạn có thể sử dụng addr.State.Code hoặc addr.State.Text, tùy thuộc vào nhu cầu. Nó linh hoạt hơn nhiều.
+0

Nếu bạn đang sử dụng ViewModels thì sao? Tôi đã thử cách tiếp cận ở trên và nó dường như không hoạt động? Làm thế nào tôi sẽ ánh xạ giữa Id và thực thể tra cứu trên đối tượng? – Burt

+0

@Burt Ví dụ của tôi ở trên chưa hoàn chỉnh, nhưng kỹ thuật này sẽ hoạt động để sử dụng chế độ xem hoặc trực tiếp sử dụng mô hình. Với mã EF đầu tiên, khung làm việc lập bản đồ cho bạn. Tôi tốt (và gần đây hơn) giới thiệu về EF và MVC có thể được tìm thấy [ở đây] (http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity -framework-data-model-for-an-asp-net-mvc-ứng dụng) –

1
  1. Có bạn chỉ cần tạo tập lệnh DBCreation mới mở rộng tập lệnh gốc và tạo bảng trạng thái không có quan hệ với Khung thực thể.

  2. Nếu tôi là bạn, tôi sẽ tạo thực thể nhà nước. Nếu thực thể nhà nước không được tạo ra, cuối cùng bạn cần phải tạo nó trong mã, nhưng cư trú thực thể này sẽ là một vấn đề, bạn sẽ cần phải sử dụng sql (bạn có thể lưu trữ dữ liệu này trong xml mà có vẻ là một lựa chọn tốt hơn so với lưu trữ trong sql).

  3. Nếu bạn quyết định lưu trữ bảng trong cơ sở dữ liệu và trực tiếp sử dụng nó bằng cách tạo một thực thể, làm cho nó trở thành tài sản điều hướng là một lựa chọn tốt hơn vì bạn có thể sử dụng nó trực tiếp trong khi tải chậm hoặc tải mong muốn bằng cách bao gồm nó.