对Entity Framework 4.0尝试的吐槽

因为新公司的同事以前用过EF所以在我的项目里面也要用这个,随即上博客园找了几篇文章试验了一下。我用的是VS2010正式版跑网上的代码会报错,这种事真是相当恶心人,要不是没的选择我肯定就放弃这个框架了。用微软的东西无比恶心像EF这种核心必备框架也不弄稳定了就发行1、2、3版,结果到了4.0才刚刚支持POCO这种东西,好像刚出来的时候连从代码创建数据库都不支持。而且就算到了4.0它的CTP版本之间的api也不一样,甚至连EF的程序集名字都变来变去的,微软这帮人不是坑爹嘛。如果你也是第一次接触EF请先去ADO.net team官方blog上面找EF的最新版本发布信息。对于CTP5来说请点击这个链接然后在里面下载程序集并阅读简单的文档。再发两句牢骚,微软出的这些框架就不能把它们都统一放在一个地方便于用户搜索下载吗?类似于python的http://pypi.python.org/这样的网站,每一次版本更新的说明和相关文档都能方便的看到这样做多人性。还有就是用模板生成实体的时候就报错我真是无语了。

 

不废话了简单实验一下,先定义实体然后创建数据库并简单的访问,数据库链接写在app.config中:

 

//枚举类型 public enum UserType { Admin, User, Guest, } //对枚举类型的包装,因为ComplexType只支持引用类型 public class UserTypeWrapper { public int Value { get; set; } public static implicit operator UserTypeWrapper(UserType type) { return new UserTypeWrapper { Value = (int)type }; } public static implicit operator UserType(UserTypeWrapper wrapper) { return (UserType)wrapper.Value; } public override string ToString() { return Value.ToString(); } } //实体类Person public class Person { public string IdentityNo { get; set; } public string Name { get; set; } //关联实体类Company public Company Company { get; set; } public UserTypeWrapper Type { get; set; } } //实体类Person的配置类 public class PersonCfg : EntityTypeConfiguration { public PersonCfg() { //定义主键 HasKey(p => p.IdentityNo); //修改映射的表名称 Map(mc => mc.ToTable("t_person")); } } //实体类Company public class Company { public int CompanyId { get; set; } public string CompanyName { get; set; } } //实体类Compony的配置类 public class CompanyCfg : EntityTypeConfiguration { public CompanyCfg() { //定义主键 HasKey(c => c.CompanyId); //取消自增 Property(c => c.CompanyId).HasDatabaseGenerationOption(DatabaseGenerationOption.None); //修改映射的表名称 Map(mc => mc.ToTable("t_company")); } } //上下文 public class POCOContext : DbContext { //设置数据库的名称 public POCOContext() : base("poco_db") { } //用于访问Person和Company public DbSet Persons { get; set; } public DbSet Companys { get; set; } //加载配置 protected override void OnModelCreating(ModelBuilder modelBuilder) { //复杂类型类似于NHibernate中的嵌入类 modelBuilder.ComplexType(); modelBuilder.Configurations.Add(new PersonCfg()); modelBuilder.Configurations.Add(new CompanyCfg()); base.OnModelCreating(modelBuilder); } } 

 

class Program { static void Main(string[] args) { DbDatabase.SetInitializer(new DropCreateDatabaseIfModelChanges()); using (var db = new POCOContext()) { db.Database.CreateIfNotExists(); var c = db.Companys.Find(102); if (c == null) { c = new Company { CompanyId = 102, CompanyName = "迈思奇科技有限公司" }; db.Companys.Add(c); } var p = db.Persons.Find("407"); if (p == null) { p = new Person { IdentityNo = "407", Name = "Lucifer", Company = c, Type = UserType.User }; db.Persons.Add(p); } else { p.Type = UserType.Guest; } var recordsAffected = db.SaveChanges(); Console.WriteLine("Saved {0} entities to the database, press any key to exit.", recordsAffected); } } } 

 

你可能感兴趣的:(c#)