Có cách nào để lấy các loại POCO từ cá thể DbContext được chỉ định không?EF CodeFirst: Nhận tất cả các loại POCO cho DbContext
Trả lời
Bạn cần truy cập vào MetadataWorkspace
public class MyContext : DbContext
{
public void Test()
{
var objectContext = ((IObjectContextAdapter)this).ObjectContext;
var mdw = objectContext.MetadataWorkspace;
var items = mdw.GetItems<EntityType>(DataSpace.CSpace);
foreach (var i in items)
{
Console.WriteLine("Class Name: {0}", i.Name);
}
}
tnx, nhưng tôi cần quyền truy cập vào các thuộc tính Loại, thuộc tính và thuộc tính POCO lớp - Các trường hợp EntityType trả về việc thực hiện riêng trong Properties, PropertiesMetadata và v.v. – DrAlligieri
@DrAlligieri Bạn có thể lấy tên đầy đủ của loại và sau đó sử dụng phản xạ để truy cập các thuộc tính và thuộc tính. – Eranga
FullName trả về "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - là không gian tên sai cho lớp POCO – DrAlligieri
@Lei Yang: bạn có thể sử dụng điều này để có được tất cả các loại vào một danh sách.
var objectContext = ((IObjectContextAdapter) dbContext).ObjectContext;
var mdw = objectContext.MetadataWorkspace;
var items = mdw.GetItems<EntityType>(DataSpace.CSpace);
var dbContextAssembly = dbContext.GetType().Assembly;
var entityTypes = new List<Type>();
foreach (var i in items) {
entityTypes.Add(dbContextAssembly.GetType(i.FullName));
}
Thật không may, tôi không thể chỉnh sửa các câu trả lời được chấp nhận - bạn chỉ cần thay đổi dataspace sử dụng như sau
var items = mdw.GetItems<EntityType>(DataSpace.OSpace);
để có được lớp POCO của bạn thay vì các proxy EF.
có cùng vấn đề, bạn đã giải quyết chưa? Tôi cần trợ giúp .. =/ –