使用实体框架(4.3.1版)时遇到的问题
在这里,记录使用实体框架(4.3.1版)之前遇到的问题。更新没有主键的表默认情况下,EF不能更新、插入或删除没有主键的表。查看xml中的edmx文件,您可以在SSDL看到下面的xml片段(我定义了一个没有主键的表tb _ WithoutKey)。复制代码如下:实体集名称=' TB _ withoutkey '实体类型=' transfer model . store . TB _ with tkey ' store 3360 type=' tables ' store 3360 schema=' dbo ' store 3360。名称=' tb _ WithoutKey '定义查询选择[TB _ WitKey]。[标识]为[标识],[TB _无密钥]。[dbo]中的[name]作为[name]。作为[TB _ without key]/defining query/entity set,我将添加另一个带有主键的表进行比较。同样,在SSDL,我们可以看到主键表的定义如下。复制代码如下:实体集名称=' TB _ with key '实体类型=' transfer model . store . TB _ with key ' store : type=' tables ' Schema=' dbo '/无主键的entity set根据上述节点进行更改:删除DefiningQuery节点,将store:Schema="dbo "更改为Schema="dbo "。这样,我们可以更新、删除和插入之前没有设置主键的表。没有主键的表SSDL定义实际上更像视图。我有点不清楚命名空间store:是做什么的,为什么仅仅删除DefiningQuery是不够的,还需要删除Schema属性的存储命名空间。这些都是我不明白的,但是作为一个解决方案,真的很简单,也很可行。更改代码优先的默认连接。我们知道,当使用代码优先时,我们甚至不需要编写连接字符串,但是这个默认连接只识别本机SQL Express数据库。如果使用其他数据库甚至是非Sql Server Express,那就不行。在不提供任何连接数据库信息的情况下,EF将创建一个DefaultConnectionFactory,它使用SqlConnectionFactory,然后我们可以通过反射器看到它的构造函数如下。public SqlConnectionFactory(){ this。_baseConnectionString=@ '数据源=。\ SQLEXPRESS集成安全性=真;多活动结果集=真”;}因此默认情况下EF只能连接到Sql Express数据库。SqlConnectionFactory提供了一个构造函数重载,它可以指定连接字符串并修改默认的数据库连接。我们可以在配置文件中添加以下节点进行配置。复制代码如下: entity framework defaultconnectionfactory type=' system。data . entity . infra structure . sqlconnectionfactory,entity framework' parameters参数值='数据源=heqichang-PC;集成安全性=真;multiplicationresultset=true '//parameters/defaultconnectionfactory/entity framework。不过我觉得还是指定连接字符串进行开发比较好,排除各种不可控因素。检测字符串截断错误有时,当使用EF时,会出现如下错误。
出现此错误的原因是数据库中字段集的长度小于您插入的新数据的长度。但知道了原因,就很难知道是哪个领域超出了范围,EF给出的信息也不清楚。当然,如果数据库中的字段很少,可以快速过滤掉,但是如果表中的字段很多,那就麻烦了。此时,我们可以使用SQL server附带的SQL Server事件探查器(快速版本没有此工具)。假设我有一个名为varchar(10)类型的tb_Test表。在运行错误的程序之前,请打开Profiler,选择您所连接的数据库并开始监控。最后,我们可以看到我们错误的SQL语句。
该工具可以方便地监控EF运行时对数据库的操作。注意上图,工具会自动区分这是来自Entity Framework的请求,然后下面就是具体的SQL语句。以上只是我最近两周使用EF实际遇到的问题总结。实践中,遇到的问题肯定不止以上这些。欢迎你向你的园艺朋友提出更多的问题。
版权声明:使用实体框架(4.3.1版)时遇到的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。