5

Giả sử rằng tôi có cơ sở dữ liệu với 1 bảng có tên là Products. Vì vậy, tôi đi qua phương pháp Db First và tạo ra một mô hình EF trong VS 2012 với tùy chọn pluralize and singularize.Cách xác định quy ước đặt tên tùy chỉnh nếu EF 5

Vì vậy, mô hình tạo đối tượng Product cho tôi và quy ước đặt tên mặc định ánh xạ thực thể này thành bảng dbo.Products.

Bây giờ tôi muốn thay đổi hành vi này. Trong thực tế, tôi muốn tạo một quy ước tùy chỉnh để ánh xạ thực thể ProductModel tới bảng dbo.Products.

Điều này có khả thi không ?! Nếu vậy, làm thế nào?

Cập nhật: Mục tiêu của tôi để làm điều đó ...

Như bạn đã biết, bất cứ khi nào bạn cập nhật mô hình của bạn từ cơ sở dữ liệu, nếu nó gây ra một sự thay đổi trong mô hình của bạn, các thực thể tự động tạo ra sẽ kết thúc bằng văn bản .

Từ Mặt khác, tôi muốn thêm dữ liệu chú thích thuộc tính tài sản thực thể vì vậy mà tôi có thể sử dụng chúng để hình thành quan điểm của tôi và muốn chỉ đơn giản là làm việc với DbContext tôi như chèn sau:

public ActionResult Create(Product product) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(product); 
    } 

sự vấn đề là phân tích ứng dụng của tôi không hoàn thành và cơ sở dữ liệu thay đổi theo thời gian. Vì vậy, tôi cần cập nhật mô hình từ cơ sở dữ liệu và sau đó, tất cả các thuộc tính của tôi sẽ bị xóa.

Vì vậy, tôi quyết định tạo một lớp ProductModel và sao chép mã Product vào đó và chuyển các lượt xem đó thành dạng xem. Sau đó, whene tôi muốn truy vấn db của tôi, tôi sẽ nhận được một ngoại lệ mà nói rằng tên dbo.ProductModels là không tồn tại trong db ...

Cảm ơn trước

+0

Không ...! Tôi có thể, nhưng tôi không muốn chỉnh sửa .edmx và các thực thể của nó – AminSaghi

+1

Vì vậy, bây giờ tôi hoàn toàn bị mất như (a) những gì bạn muốn làm, và (b) những gì câu hỏi của bạn thực sự là .... . * quy ước duy nhất * Tôi biết là các quy ước tùy chỉnh mà EF ** 6 ** sẽ mang đến cho quá trình phát triển mã. Không có gì khác tồn tại, tôi sợ –

+0

Các bạn thân mến! Tôi đã cập nhật câu hỏi của mình và thêm một số giải thích ... – AminSaghi

Trả lời

3

Theo mặc định, một cách tiếp cận cơ sở dữ liệu đầu tiên sẽ luôn luôn ánh xạ một tên bảng cho một thực thể có cùng tên (có thể là số nhiều/số ít). Hiện tại không có điều khoản nào trong EF để điều chỉnh theo các quy ước hoặc công cụ. Bạn có thể thay đổi/điều chỉnh/tùy chỉnh mô hình của mình - nhưng nếu bạn tạo lại mô hình, những thay đổi đó sẽ bị mất. Tôi không biết về bất kỳ công cụ/script/hack nào bằng cách nào đó "bảo tồn" những thay đổi đó và áp dụng lại chúng sau khi tạo lại mô hình từ cơ sở dữ liệu.

Nếu bạn cần phải mở rộng tạo ra tôi muốn đề nghị sử dụng một thực tế rằng đó là những phần lớp - bạn có thể mở rộng lớp được tạo ra trong một file vật lý thứ hai:

Viết này trong một file riêng biệt , ví dụ ProductExtension.cs:

public partial class Product 
{ 
    // add your custom methods etc. here 
} 

Những tập tin khác nhau tạo nên lớp đó sẽ được sáp nhập lại với nhau thành một lớp bởi trình biên dịch C# cho bạn.

Nếu bạn cần thêm chú thích dữ liệu đến các lớp học tạo hiện có, bạn có thể sử dụng MetadataType (..) thuộc tính as shown in this SO question and its answers:

Viết này trong một file riêng biệt, ví dụProductExtension.cs:

[MetadataType(typeof(ProductMetaData))] 
public partial class Product 
{ 
} 

và sau đó xác định các chú thích siêu dữ liệu/dữ liệu cho lớp sản phẩm của bạn chưa tập tin khác, ProductMetadata.cs, như thế này:

public class ProductMetaData 
{ 
    [Required] 
    public int RequestId {get;set;} 
    //... 
} 
Các vấn đề liên quan