Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何拒绝数据库中某些表的EF更新模型?_Entity Framework_Ef Database First - Fatal编程技术网

Entity framework 如何拒绝数据库中某些表的EF更新模型?

Entity framework 如何拒绝数据库中某些表的EF更新模型?,entity-framework,ef-database-first,Entity Framework,Ef Database First,当从数据库更新模型时,是否有方法告诉EF不要更新单个表的SSDL 更多细节: 我们使用EF4.3和Db优先方法(因此,edmx和从数据库更新模型) 我们有一个表,由于某些原因,它在SQL Server中没有设置主键,但有一个自动递增的Identity列,我们可以告诉EF将其用作主键 由于EF在表本身中找不到任何主键,因此它在SSDL中为该表生成一个定义查询(并防止更新/插入) 我可以很容易地删除定义查询(并修改其他EntitySet属性),一切正常 除了当我从数据库更新模型时,定义查询又回来了

当从数据库更新模型时,是否有方法告诉EF不要更新单个表的SSDL

更多细节:
我们使用EF4.3和Db优先方法(因此,edmx和从数据库更新模型)

我们有一个表,由于某些原因,它在SQL Server中没有设置主键,但有一个自动递增的
Identity
列,我们可以告诉EF将其用作主键

由于EF在表本身中找不到任何主键,因此它在SSDL中为该表生成一个定义查询(并防止更新/插入)

我可以很容易地删除定义查询(并修改其他EntitySet属性),一切正常

除了当我从数据库更新模型时,定义查询又回来了

有没有办法告诉EF不要为单个表更新SSDL

有没有办法告诉EF在以下情况下不要更新单个表的SSDL 从数据库更新模型

Visual Studio中未提供默认设计器。修改EDMX文件的SSDL部分后,应手动维护该文件,或编写脚本,以便在每次从数据库运行更新时修复该文件

或者,您可以购买功能更强大的designer,或提供选择性更新


无论如何,你要避免做的事情。如果数据库归ERP所有,则应仅通过ERP编程API进行访问(真正的ERP有一些)。否则,您可能会破坏ERP的功能,损坏ERP数据,导致性能问题,甚至导致死锁。

嗯,最简单的解决方案是在该标识列上为该表提供主键。。。。任何“真实”表都应该有一个主键。这有点难:)真实表确实有一个键(记住):它是由4列组成的,其中一些列可以为null(EF不喜欢键中的null)。因此,为了便于使用,我们添加了一个代理键。但数据库也由ERP服务填充和使用,它不知道
Identity
字段,所以我们不能将其作为主键。代理键的想法很有效,并且真正简化了一些事情,除了ssdl重新生成。为什么不能将代理列作为主键??主键的作用是唯一地标识每一行-代理
标识
可以很好地完成这一点!原因有点脱离上下文:)实际上,有一个服务执行MsSQL db与ERP系统的同步,ERP系统有自己的“数据库”。该服务应该知道所有主键,以便将它们与ERP键关联。但是ERP中没有代理
身份
,他们也不需要它。修改同步过程目前是不需要的。我知道,我知道,而且我确实使用了api:)我还考虑将其集成到.tt模板中并手动更正ssdl,这似乎是一种可行的方法。谢谢你的回答!FWIW,延期可能不会太久:重要通知:该产品将于2013年12月31日停产。现有许可证仍然有效,并且仍然可以在VisualStudio2012、2010和2008中使用。但是,在此日期之后将不会颁发新的许可证。