.net – 如何在实体框架中使用Database first方法使用Repository
如何在实体框架中使用数据库第一种方法使用存储库模式.我在浏览互联网上可用的资源时得到了一些想法但是对于实时应用程序我不知道如何从数据库第一种方法在自动生成的类上实现存储库模式.
我已经在SO中找到了一些链接,但我没有明白任何想法.我是这个新手. 解决方法
代码生成工具仅修改映射到
XML文件的类.你有几个选择:
1)您可以使用分部类扩展映射的类.使用该工具更新代码时,自动化工具不会修改部分类. 2)您还可以处理配置文件中的数据注释和实体配置,只是要小心,因为在某些情况下它们可能会发生冲突.低于一个片段: public class YourClassConfiguration : EntityTypeConfiguration<YourClass> { public YourClassConfiguration() { ToTable("YourTable"); HasKey(e => e.Property1); Property(e => e.Property1).HasColumnName("MyName").HasMaxLength(30); } } 我正在使用这种方法,老实说,我建议你像我一样将实现转移到Code First方法.在我个人看来,当设计师决定创建重复的密钥或没有正确更新XML文件时,维护和修复问题会很困难,因为它不止一次发生在我身上.好消息是,您可以避免迁移和Code First使用的一些功能,并保留DB结构.一切都可以配置.如果你有兴趣,我可以告诉你更多. 无论如何,我还附加了一个GenericRepository模式的简单代码片段,您可能会发现它很有用.我还强烈建议在实现中使用dependecy Injection(GenericRepository模式需要解析依赖关系).我会推荐Autofac.它非常稳定并且有很大的支持. public class EntityRepository<T> : IRepository<T>,IDisposable where T : class,IEntity { private readonly DbSet<T> dbset; private readonly DbContext _context; private readonly bool _lazyLoadingEnabled = true; public EntityRepository(DbContext context,bool lazyLoadingEnabledEnabled) : this(context) { _lazyLoadingEnabled = lazyLoadingEnabledEnabled; } public EntityRepository(DbContext context) { _context = context; _context.Configuration.LazyLoadingEnabled = _lazyLoadingEnabled; dbset = context.Set<T>(); } public void Add(T entity) { dbset.Add(entity); _context.SaveChanges(); } public void Update(T entity) { var originalValues = FindOne(x => x.Id == entity.Id); _context.Entry(originalValues).CurrentValues.SetValues(entity); _context.SaveChanges(); } public void Remove(T entity) { dbset.Remove(entity); _context.SaveChanges(); } public List<T> Find(System.Linq.Expressions.Expression<Func<T,bool>> predicate) { return dbset.Where(predicate).ToList(); } public T FindOne(System.Linq.Expressions.Expression<Func<T,bool>> predicate) { return dbset.FirstOrDefault(predicate); } public List<T> FindAll() { return dbset.ToList(); } } 界面非常简单: public interface IRepository<T> where T : class,IEntity { void Add(T entity); void Update(T entity); void Remove(T entity); T FindOne(Expression<Func<T,bool>> predicate); List<T> Find(Expression<Func<T,bool>> predicate); List<T> FindAll(); } 将接口应用于您创建的部分类以扩展数据库的第一个类,您将能够在存储库中查询这些实体.您还可以向存储库接口添加“属性”以使这些属性可见,并添加常用的搜索功能,如Id,name等常用属性(如果适用). 我希望它有所帮助,卡洛斯 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – VS2017 RC Web部署 – ERROR_CERTIFICATE_
- asp.net – 在将其上传到服务器之前,在客户端进行跨浏览器检
- asp.net – 在更改密码时从所有浏览器注销用户
- 使用ASP.NET通过POST接收(和发送)XML
- asp.net-mvc – IIS站点上的高CPU
- 在加载asp.net页面时显示gif
- asp.net-mvc – 使用IIS7.5将网站中的URL绑定到另一个网站控
- asp.net – 带有MVC 4.0的DotNetOpenAuth
- asp.net-mvc – 在ASP.NET MVC中,response.redirect如何工作
- 在ASP.NET中的Web.Config中模拟标签
- asp.net-mvc – 如何在MVC中实现工作单元:责任
- asp.net – DropDownList SelectedIndex值未在Au
- asp.net-mvc – POST后重定向不会更改URL
- asp.net – 从代码后面添加文本框服务器控件?
- asp.net – Web.Config可能“不可读”
- asp.net-mvc – 具有持久HTTP连接的IDbConnectio
- asp.net-mvc – 如何使用app_start或webactivato
- 如何编写没有Try/Catch的程序
- asp.net-mvc – ASP.NET MVC4,带有webforms Defa
- 是否可以使用ASP.NET ScriptManager来使用Window