你的问题很不清楚。你在说你是从你的模式中生成代码,并且同时你在问是否有办法先用代码映射它。
DbContext API!=代码第一种方法。人们应该在Fluent/Annotations映射和从代码生成数据库的代码优先方法之间有所不同。如果您从数据库生成代码,那么显然使用数据库优先方法。
数据库优先解决方案:数据库视图,但它会使您的实体只读。 Imho即使表格发生变化也不会有问题。如果您只需要两列,并且没有人会更改这两列或创建新的所需列,则映射的团队应该仍然可以工作。如果有人改变你的专栏,将不会有有效的方法来避免破坏你的代码。
您还可以使用像QueryView(定位描述中的视图)和DefiningQuery(定制选择存储描述中)的高级EDMX功能,但这些功能可能是针对您的方案矫枉过正的。
代码优先解决方案:关闭模型元数据验证和数据库初始化。它需要设置初始化到null
:
// Use this code in the application start up
Database.SetInitializer<MyContext>(null);
和删除IncludeMetadataConvetion
:
public class MyContext : DbContext
{
...
protedte override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
}
在两种方法中,您还可以使用自定义的SQL查询或自定义LINQ投影。
是的..我在想同样的事情..谢谢你的回答... – jojo 2011-04-04 01:46:54