Bạn có thể sử dụng thư viện FenixRepo (cũng có sẵn dưới dạng nuget package) để tạo bảng cụ thể, đó là một phần của bạn Context
.Trước hết, bạn nên gọi một lần, khi khởi động phương thức static
Initialize
, trong đó đối số đầu tiên là phương thức nhà máy, trả về phiên bản Context
và phương thức thứ hai là ví dụ Configuration
class
. Nó sẽ chuẩn bị các tập lệnh SQL cho tất cả các bảng của bạn, được đăng ký tại số Context
của bạn. Ở trường hợp của ASP.NET MVC nó là một quyết định đúng đắn để dán mã này vào Global.asax:
FenixRepositoryScriptExtractor.Initialize(() => new Context(), new Configuration());
Sau đó, bạn có thể tạo bảng mong muốn loại MyTable
cách đơn giản này:
var repo = new FenixRepositoryCreateTable<MyTable>();
//or repo = new FenixRepository<MyTable>();
repo.CreateTable();
Ngoài ra, nếu bảng của bạn trải rộng giữa một số di chuyển và chúng không có gì tương ứng với các bảng khác, bạn có thể chỉ định những di chuyển này (tức là tên của các lớp từ thư mục Migration) qua FenixAttribute
và chính xác chúng sẽ được sử dụng làm nguồn của tập lệnh SQL. để tạo bảng:
[Fenix(nameof(Initial), nameof(MyTableFirstMigration), nameof(MyTableSecondMigration))]
public class MyTable
{
//some stuff
}
Nếu không có thuộc tính này, thư viện sẽ sử dụng mặc định tập lệnh. Tốt hơn hết là chỉ định di chuyển, vì nếu không, sẽ không đảm bảo rằng tất cả các chỉ mục sẽ được tạo và cũng có thể bao gồm một số mã tùy chỉnh, sẽ không được thực hiện trong trường hợp giải pháp mặc định.
Thư viện tương thích và được kiểm tra với EF 6.1.3 trong trường hợp MS SQL.
Nguồn
2017-04-19 16:01:37
Hmm, tôi giả sử gì để đưa vào chuỗi kết nối nếu không có cơ sở dữ liệu ban đầu để kết nối? Tôi chỉ xóa mảnh danh mục ban đầu khỏi nó và nhận được cùng một tên đối tượng không hợp lệ 'dbo.Movies'. – Pieces
Chuỗi kết nối cho biết nơi tạo cơ sở dữ liệu. Nó không phải tồn tại. Nó sẽ phát hiện ra rằng nó không tồn tại và sau đó cố gắng tạo ra nó nếu nó không tồn tại. Miễn là nó có quyền chính xác, mọi thứ sẽ được tạo ra tốt. Tôi nghĩ rằng nếu bạn xóa cơ sở dữ liệu và giữ cùng một chuỗi kết nối thì mọi thứ sẽ kết thúc theo cách bạn muốn. – Dismissile
Ồ, cảm ơn bạn rất nhiều! Một câu hỏi cuối cùng mà phương pháp bạn sẽ khuyên bạn nên đặt Database.SetInitializer in Tôi đã nhận một lỗi mà nó không thể thả cơ sở dữ liệu vì nó đã được sử dụng. Tôi sẽ đoán trước bằng việc tự ứng dụng nó. Cảm ơn một lần nữa, bạn tôi và tôi dành rất nhiều thời gian tìm kiếm để tìm ra vấn đề và sẽ không bao giờ đoán rằng đó là cơ sở dữ liệu không nên được tạo ra. – Pieces