C# 如何首先使用实体框架代码防止对象被持久化?
我有一个对象模型,我正在使用EF4.2持久化到一个SQL Compact数据库。我的一个类有一个用于确定对象是否被修改的标志。如果对象从未从其默认值更改,我不希望将其保存到数据库中。有没有一种方法可以配置C# 如何首先使用实体框架代码防止对象被持久化?,c#,.net,entity-framework,sql-server-ce,C#,.net,Entity Framework,Sql Server Ce,我有一个对象模型,我正在使用EF4.2持久化到一个SQL Compact数据库。我的一个类有一个用于确定对象是否被修改的标志。如果对象从未从其默认值更改,我不希望将其保存到数据库中。有没有一种方法可以配置DbModelBuilder来丢弃基于此属性的对象(这是一个bool)?我正在考虑的另一个选项是重写DbContext.SaveChanges,如果对象未被修改,则只从DbSet中删除该对象。建议?如果未修改附加对象,则不会将其保存到数据库中DbContext有自己的更改跟踪机制,它不会使用您的
DbModelBuilder
来丢弃基于此属性的对象(这是一个bool)?我正在考虑的另一个选项是重写DbContext.SaveChanges
,如果对象未被修改,则只从DbSet
中删除该对象。建议?如果未修改附加对象,则不会将其保存到数据库中DbContext
有自己的更改跟踪机制,它不会使用您的自定义属性。为什么不将其添加到您的业务逻辑中?我的意思是,EF为什么要处理这个问题?它可以简单到:
if myObj.WasModified
context.SaveChanges()
else
do nothing
更不用说,如果对象没有被修改,EF也不会做任何事情现在还不清楚你在问什么。您是否试图禁止保存未修改的对象?我的理解是EF不会保存未修改的对象。请看,实际上我正在创建对象,并丢弃那些在保存之前从未更改过的对象。所以我不确定变更跟踪是否有效。谢谢你的链接,很有趣的东西。很好的观点,但是我的程序的结构导致在我最终知道是否应该保存对象之前先创建对象。在这一点上,我认为如果我没有特别检查我的标志并抛出它,EF会将其添加到数据库中。不过我还没有尝试过。如果你不想保存对象,首先不要将它附加/添加到上下文中。看起来您正在试图解决由糟糕的程序设计或糟糕的EF使用(或两者都是因为EF对您的程序设计提出了要求)引起的问题。同样,这是一个好的观点。目前,我一直坚持设计,只是围绕着它工作。谢谢