Questions tagged «entity-framework»

由Microsoft构建的ORM,可作为.Net Framework 3.5和更高版本的一部分使用。

1
使用迁移或SQL Server数据工具进行代码优先是否更合适?
我已经获得建立一个新的MVC4网站的规范,起初它不会是一个太大的项目,但是我怀疑它会随着企业对它的新想法的发展而增长。 使用.NET 4.5 ASP.NET MVC4和EF,我必须在进行迁移的代码优先或Sql Server Data Tools(SSDT)之间进行选择,以处理数据库。 借助SSDT,我可以在项目中控制数据库,这是解决方案的一部分,并且可以使用dacpac文件处理从开发到生产的所有更改。我从MVC3进行代码优先的经验是,由于数据库选项有限,所以没有在开发中使用它。最终会导致在模型更改时放弃Db或手动处理Db更改。但是,我被认为不再使用MVC4迁移了,现在我可以将更新推送到Db了。 因此,我的问题是,在节省开发时间/精力的同时,还可以扩展并能够处理生产变更,哪种方法最有效。我喜欢代码优先和能够从模型生成数据库的能力,现在迁移的引入使它在生产中可行吗?

3
实体框架实体-来自Web服务的一些数据-最佳体系结构?
当前,我们在多个Web应用程序中使用Entity Framework作为ORM,并且到目前为止,由于我们的所有数据都存储在单个数据库中,因此它非常适合我们。我们正在使用存储库模式,并具有使用它们的服务(域层),并将EF实体直接返回到ASP.NET MVC控制器。 但是,提出了使用第三方API(通过Web服务)的要求,这将为我们提供与数据库中与用户相关的额外信息。在我们的本地用户数据库中,我们将存储一个外部ID,我们可以将其提供给API以获取其他信息。有很多可用的信息,但是为了简单起见,其中之一与用户的公司有关(名称,经理,房间,职务,位置等)。此信息将在整个Web应用程序的各个位置使用-而不是在单个位置使用。 所以我的问题是,填充和访问此信息的最佳位置是哪里?由于它已在各个地方使用,因此无论我们在Web应用程序中使用的何处,都临时地获取它并不明智,因此从域层返回这些附加数据是有意义的。 我最初的想法只是创建一个包含EF实体(EFUser)的包装模型类,以及一个包含新信息的新'ApiUser'类-当我们获取用户时,我们获取EFUser,然后获取其他来自API的信息,并填充ApiUser对象。但是,虽然这对于获得单个用户来说是不错的选择,但在获得多个用户时却会失败。获取用户列表时,我们无法点击API。 我的第二个想法只是向EFUser实体添加一个单例方法,该实体返回ApiUser,并在需要时填充它。这解决了上述问题,因为我们仅在需要时才访问它。 或最终的想法是将数据的本地副本保留在我们的数据库中,并在用户登录时将其与API同步。这是最小的工作,因为这只是一个同步过程-而且我们没有点击的开销每当我们想要获取用户信息时,数据库和API。但是,这意味着将数据存储在两个位置,也意味着该数据对于已经一段时间没有登录的任何用户而言都是过时的。 是否有人对如何最好地处理这种情况有任何建议或建议?

3
带有ORM的DDD业务逻辑应该去哪里?
我过去使用过MDA(模型驱动的体系结构)工具,我们通过UML进行建模,这会生成业务实体(我们的域模型)和ORM(映射等)。 该域上的许多业务代码和服务都是该模型的一部分,并且我们的存储库正在返回业务实体(因此,不可能切换到另一个ORM(不是我们想要的))。 但是,现在我正在开始一个项目,我想从DDD角度进行思考。 到目前为止,感觉好像我将业务逻辑放入域模型中,并通过存储库与ORM(无论选择哪种)一起使用。但是,如果我想继续在应用程序的ORM部分中使用MDA工具,则此处创建的模型将非常贫乏(即不包含任何业务逻辑)。同样,如果我将实体框架(.net)或NHibernate用于我的ORM,它也将是贫血模型。我不确定如果我刚刚使用NHibernate,您会将业务逻辑放在哪里。 我是否以这种方式正确思考,换句话说,使用DDD使用域中的所有业务逻辑,而仅使用ORM通过存储库进行持久化?

4
LINQ与数据访问层
我自学成才,始终在业务逻辑和UI代码的完全独立的“层”中处理任何数据访问代码。对于我而言,这一直是一个非常好的架构,并且我看到的任何“规则”或最佳实践仍设法适应这种编码风格,尤其是“ 单一责任原则”。 对于我的大多数家庭项目,我将使用自己创建的ORM,我一直打算将其制作为开源代码。但是从那时起,LINQ可用了,这与我的ORM的工作方式非常相似(但更好)。 我以前无法使用自己的ORM进行我现在无法使用LINQ进行的任何操作(REST集成的某些功能除外)。所以我的问题是;LINQ是我的新数据访问层吗?我是否需要此层了?我的BLL应该直接与LINQ对话吗?还是这种不良做法? 编辑: 最初的问题是指LINQ to Entities,但是有关LINQ to SQL的答案很多。人们对他们两个都有什么想法?我收集到的信息比LINQ to SQL不能真正替代DAL,但是可以使用实体框架吗?

7
实体框架是否已准备好投入生产?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在研究将要进行的新项目的Entity Framework,并且作为对它的研究的一部分,我向一些行业专业人员询问它是否稳定并且为“现实世界”的实施做好了准备。 在运行中是: 英孚 NHibernate DevExpress XPO 我已经在XPO方面拥有丰富的经验,但是我对此并不特别满意。

2
我可以使用分离但相等的对象更新附加对象吗?
我从外部API检索电影数据。在第一阶段,我将抓取每部电影并将其插入我自己的数据库中。在第二阶段中,我将使用API​​的“更改” API定期更新数据库,我可以查询该API以查看哪些电影的信息已更改。 我的ORM层是实体框架。Movie类如下所示: class Movie { public virtual ICollection<Language> SpokenLanguages { get; set; } public virtual ICollection<Genre> Genres { get; set; } public virtual ICollection<Keyword> Keywords { get; set; } } 当我有一部需要更新的电影时,就会出现问题:我的数据库会认为正在跟踪的对象以及从update API调用接收到的新对象都是不同的对象,而无视.Equals()。 这引起了一个问题,因为当我现在尝试使用更新的影片来更新数据库时,它将插入数据库而不是更新现有的影片。 我以前在语言方面遇到过这个问题,我的解决方案是搜索附加的语言对象,将它们与上下文分离,将其PK移至更新的对象,然后将其附加到上下文。当SaveChanges()正在执行,它将基本上取代它。 这是一种很臭的方法,因为如果我继续对Movie对象使用这种方法,则意味着我必须分离电影,语言,流派和关键字,在数据库中查找每个人,传输其ID并插入新对象。 有没有办法更优雅地做到这一点?理想情况下,我只想将更新的影片传递给上下文,并让该影片根据该Equals()方法选择正确的影片进行更新,更新其所有字段并针对每个复杂对象:根据其自己的Equals()方法再次使用现有记录,并插入它尚不存在。 我可以通过.Update()在每个复杂对象上提供方法来跳过分离/附加,可以结合使用这些方法来检索所有附加对象,但这仍然需要我检索每个现有对象然后进行更新。

1
ORM POCO是否取代域实体?
这有点类似于这个问题,但是范围更广。 总的来说,有了像EF 4.1这样的POM支持的ORM,现在将您的域实体作为持久化到数据库的对象有意义吗? 借助EF 4或Linq-to-SQL等较旧的ORM,您的“数据库对象”是自动生成的,并与数据库紧密耦合,因此,对于非平凡的应用程序,先将它们映射到更健壮的智能域实体投入工作。 使用较新的ORM的想法是仅构建健壮的域实体,然后具有仅提供所述域实体与您的DBMS之间映射的数据层吗? 在写作中,我感觉到这一直是目标,但使用现有工具并不容易(轻松),至少在.NET世界中并非如此。

3
ASP.net 5和EF7中是否不再需要存储库?
我在github上向EF团队发布了一个问题。我得到了一个答复,说最好在这里提出这个问题,所以我将其复制并粘贴到此处作为链接,以便其他人可以在GitHub上看到一些答复。 问题:我正在做一些研究,有人指出DBContext类的第24行指出 DbContext是工作单元和存储库模式的组合。 这是否意味着我们不再需要将EF抽象到存储库,然后使用and Interface将其注入Controller中? Github上的原始帖子:https : //github.com/aspnet/EntityFramework/issues/4899 我问这个问题的原因是,我似乎进入了一个即时状态,即在存储库中添加了很多方法,例如GetById,GetByName,GetWithIncludesABC,GetWithIncludes123等。这似乎在困扰着我

3
在MVVM WPF中将实体框架数据库上下文(模型)连接到ViewModel的最佳方法是什么?
如上述问题:在MVVM(WPF)中将实体框架数据库模型(上下文)连接到viewModel的最佳方法是什么? 我正在WPF中学习MVVM模式,很多示例展示了如何将模型实现为viewModel,但是该示例中的模型只是简单的类,我想将MVVM与实体框架模型一起使用(基于基础的方法)。将模型连接到viewModel的最佳方法是什么? 感谢您的回答。 //ctor of ViewModel public ViewModel() { db = new PackageShipmentDBEntities(); // Entity Framework generated class ListaZBazy = new ObservableCollection<Pack>(db.Packs.Where(w => w.IsSent == false)); } 这是我通常的ViewModel指导,认为有更好的方法,我正在阅读存储库模式,不确定是否可以将其适应WPF MVVM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.