Any*_*are 7 c# entity-framework edmx visual-studio-2012 entity-framework-6
我是Entity Framework的初学者.
我注意到当我使用时EF6 with Visual studio 2013:
我有.Designer.cs这个评论的空文件:
// T4 code generation is enabled for model 'C:\Users\Luka\Desktop\Test\EF-db2008\AdventureWorks\AdventureWorksLib\AdventureWorksLib\AWLTModel.edmx'.
// To enable legacy code generation, change the value of the 'Code Generation Strategy' designer
// property to 'Legacy ObjectContext'. This property is available in the Properties Window when the model
// is open in the designer.
// If no context and entity classes have been generated, it may be because you created an empty model but
// have not yet chosen which version of Entity Framework to use. To generate a context class and entity
// classes for your model, open the model in the designer, right-click on the designer surface, and
// select 'Update Model from Database...', 'Generate Database from Model...', or 'Add Code Generation
// Item...'.
Run Code Online (Sandbox Code Playgroud)
.Context.tt它.Context.cs
的代码如下:
public partial class AWLTEntities : DbContext
{
public AWLTEntities()
: base("name=AWLTEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Address> Addresses { get; set; }
public virtual DbSet<Customer> Customers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后为每个实体.tt提交.cs文件,例如Customer.cs
使用这样的代码:
public partial class Customer
{
public Customer()
{
this.NameStyle = false;
this.CustomerAddresses = new HashSet<CustomerAddress>();
this.Orders = new HashSet<Order>();
}
public int CustomerID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用时EF4.1 with visual studio 2010,这完全不同,.Designer.cs模型背后只有一个代码!
.Context.tt,.Context.cs,.tt,.cs?而在这两种情况之间的文件层次结构有什么不同(EF6,EF4.1)?OnPropertyChanging(Value) & OnPropertyChanged()在
EF6验证我的实体!!为什么这些方法不再存在,如何在不存在,验证我的属性?所以让我们一步一步地说清楚:
你有你的.edmx文件,它是从设计师创建的或从现有数据库生成的.但它只是一个xml文件,其中包含有关所使用的数据库结构的信息- 存储方案,有关实体的信息 - 概念架构以及这两者之间的映射.它不包含任何可执行代码.需要生成此代码.
要生成代码,.edmx将解析.cs文件并创建包含实际可执行代码的文件.可能会使用2种方法:
Generator内置Visual Studio - EntityModelCodeGenerator工具.这是以前使用的遗留方法(在您的情况下在Visaul Studio 2010中).这将只生成.Designer.cs包含其中所有类的文件.但这种方法并不是最好的 - 您无法根据需要修改生成过程(例如,将DataMember属性添加到生成的类或其他一些更改).这就是为什么它更好用
T4模板.这些是带.tt扩展名的文件.他们所做的只是Run custom tool在上下文菜单中选择时执行他们的逻辑,或者.edmx更改文件.有一组可用的模板用于生成EF代码.edmx,这里有一些信息.因为这些只是常规文件,您可以根据需要修改它们(为了获得更好的编辑器体验,使用有形的T4扩展).关于T4模板在EF使用的一些基本信息在这里.
您可以独立于Visual Studio版本在这两种方法之间进行选择 - 只需更改文件Code generation strategy属性中的属性即可.edmx:

如果Legacy ObjectContext选择了该选项 - 您将获得单个.Designer.cs文件的第一种方式.如果T4- 那么.Designer.cs将为空(注释表示使用了T4模板),.tt文件将生成使用过的代码.因此,如果您需要与VS 2010中相同的代码 - 只需使用Legacy ObjectContext选项.
这两者之间的另一个区别是1-st生成遗留ObjectContext和从EntityObect派生的实体.他们都将在该.Designer.cs文件中.但是,不建议任何更多的(但你仍然可以得到相应的T4模板 -那样你会得到你OnPropertyChanged和OnPropertyChanging回来,因为他们的方法EntityObect类,但是它们受到保护,所以你可能需要写一些包装) .但最好使用POCO类和DbContext模板 - VS 2013在您的情况下使用的模板.然后,您将分别使用表示表.Context.tt生成.Context.cs派生,并生成实体类.并且之间的层次结构和仅显示由哪个生成的层次结构,而实际上只有在您的应用程序运行时才会实际编译和执行.DbContextDbSets.tt.tt.cs.cs.tt.cs
OnPropertyChanged- 这应该只是一个INotifyPropertyChanged接口的实现.但是看起来您正在使用生成POCO类的模板.这是默认和推荐的选项,但要获得实现,INotifyPropertyChanged您可能需要编辑模板或从Visual Studio Online库中选择另一个模板.但是,这可能不是最好的架构解决方案,因为有时候将实体和用于UI /业务逻辑的类分开会更好.| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |