小编Mar*_*lef的帖子

如何阻止Entity Framework尝试保存/插入子对象?

当我用实体框架保存实体时,我自然认为它只会尝试保存指定的实体.但是,它也试图保存该实体的子实体.这导致了各种完整性问题.如何强制EF仅保存我要保存的实体,因此忽略所有子对象?

如果我手动将属性设置为null,则会收到错误"操作失败:由于一个或多个外键属性不可为空,因此无法更改关系." 这非常适得其反,因为我将child对象设置为null,因此EF会将其单独留下.

为什么我不想保存/插入子对象?

由于这是在评论中来回讨论,我将给出一些理由说明为什么我希望我的孩子对象保持独立.

在我正在构建的应用程序中,EF对象模型没有从数据库加载,而是用作我在解析平面文件时填充的数据对象.在子对象的情况下,其中许多引用定义父表的各种属性的查找表.例如,主要实体的地理位置.

由于我自己填充了这些对象,因此EF认为这些是新对象,需要与父对象一起插入.但是,这些定义已经存在,我不想在数据库中创建重复项.我只使用EF对象进行查找并填充主表实体中的外键.

即使子对象是真实数据,我需要首先保存父对象并获得主键或EF似乎只是搞乱了.希望这能给出一些解释.

c# entity-framework

82
推荐指数
5
解决办法
6万
查看次数

更改SQL Server 2012数据库的排序规则

改变整理

我需要从一个特定服务器上改变我们的数据库之一的整理Latin1_General_CI_AS,以SQL_Latin1_General_CP1_CI_AI使之我们的数据库的其他部分相匹配.

更改整理对话框 -  SQL Server 2012 R2

问题

但是,当我尝试这样做时,我收到以下错误:

ALTER DATABASE失败了.数据库'XxxxxXxxxxx'的默认排序规则不能设置为SQL_Latin1_General_CP1_CI_AI.(Microsoft SQL Server,错误:5075)

我的研究

我在这个主题上的Google搜索显示了一些文章,这些文章表明我需要导出所有数据,删除数据库,使用正确的排序规则重新创建数据,然后重新导入数据.

例如:数据库归类更改出现问题(SQL Server 2008)

显然这是一项重要任务,特别是因为必须保留主外键关系,并且我们的数据库非常大(超过一千万个数据行).

我的问题

有没有办法更改现有SQL Server 2012数据库的排序规则,不需要导出和重新导入所有数据?

或者,是否有一些工具或脚本能够以可靠的方式自动执行此过程?

sql-server collation

12
推荐指数
2
解决办法
4万
查看次数

如何重新生成EDMX文件?

我正在开发一个使用Entity Framework 4的.Net 4.0项目.我们的底层数据模型已经改变,我想更新Entity Framework组件,特别是模型的EDMX文件.目前我手动执行此任务,既耗时又容易出错.

有没有办法自动重新生成EDMX文件?

另外,我更希望是否重新生成模型类,因为这些类已经使用其他逻辑进行了扩展.我可以手动编辑这些类,我只想要一种自动生成EDMX文件的方法.

.net c# asp.net-mvc entity-framework-4

6
推荐指数
1
解决办法
9554
查看次数

LINQ:强制转换为值类型'System.Int32',因为物化值为null

在数据库上执行LINQ查询时出现以下错误:

强制转换为值类型'System.Int32',因为实例化值为null。

我相信这是因为其中一列返回null。这是我的LINQ命令:

var facts = (from b in Program.db.ProductBrands
             join bm in Program.db.BrandManufacturers on b.ProductBrandID equals bm.ProductBrandID
             join c in Program.db.Companies on bm.ProductManufacturerID equals c.CompanyID
             join s in Program.db.AnimalSources on b.AnimalCode equals s.AnimalCode
             join ba in Program.db.BrandAccreditations on b.ProductBrandID equals ba.ProductBrandID into bax
             from credJoins in bax.DefaultIfEmpty()
             join a in Program.db.Accreditations on credJoins.AccreditationID equals a.AccreditationID into ax
             from accreds in ax.DefaultIfEmpty()
             join bt in Program.db.BrandTypes on b.ProductBrandID equals bt.BrandTypeID into btx
             from brandJoins in btx.DefaultIfEmpty()
             join t in Program.db.ProductTypes …
Run Code Online (Sandbox Code Playgroud)

c# t-sql linq sql-server entity-framework

5
推荐指数
1
解决办法
5923
查看次数

接受IE8的文件输入中的属性

我正在构建一个内部Web应用程序,允许用户通过文件输入元素上传文件,如下所示:

<input class="WebFormControls" type="file" accept=".csv" id="fileBulkCsv" name="fileBulkCsv" onchange="javascript:OnFileUploadChange();" />
Run Code Online (Sandbox Code Playgroud)

问题

我的问题是客户端的SOE使用IE8(嘘嘘,我知道).不幸的是,这个版本的IE不支持input元素的accept属性和type ="file"(在Chrome中运行正常).

问题

我的问题是:有没有另一种方法来重现这种行为?我的目标是让浏览器打开一个文件对话框,该对话框预设为仅过滤CSV文件.

我尝试使用文件扩展名模式(".csv")和MIME类型("text/csv")参数,但它不起作用,我怀疑IE8根本不处理accept属性.

超出范围

请注意,我对使用JavaScript验证文件名及其扩展名的概念非常满意.但是,一旦用户选择了要上载的文件,就会发生这种情况.我正在寻找一种方法(如果可能的话)来复制微软浏览器上的接受行为.

谢谢!

html javascript internet-explorer file-upload internet-explorer-8

4
推荐指数
1
解决办法
3468
查看次数

在XSLT中的值周围加上双引号

我有一个XSLT模板,它将地址数据输出为CSV.我想用双引号包装一些值,因为它们包含逗号作为地址数据的一部分.

我的问题是在转换后,双引号丢失了.我可以让处理器插入几乎任何东西,但不能插入我想要的双引号.

以下是一些示例代码:

<xsl:value-of select="./*/*/LotNumber"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="./*/*/StreetName"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="./*/*/StreetType"/>
Run Code Online (Sandbox Code Playgroud)

我之前已将$ delim定义为:

<xsl:param name="delim" select="','" />
Run Code Online (Sandbox Code Playgroud)

所以这个模板将输出例如:

10,SMITH,ST
Run Code Online (Sandbox Code Playgroud)

让我们说为了论证我想用双引号包装街道名称,以便它出现为:

10,"SMITH",ST
Run Code Online (Sandbox Code Playgroud)

我尝试过各种各样的东西,但它们都是以宣称双引号为主题的变体:

<xsl:param name="quote">"</xsl:param>
Run Code Online (Sandbox Code Playgroud)

然后将我的值包装为:

<xsl:value-of select="$quote"/>
<xsl:value-of select="./*/*/StreetName"/>
<xsl:value-of select="$quote"/>
Run Code Online (Sandbox Code Playgroud)

但是当转型运行时,我什么都没得到.它看起来和以前一样.我尝试过的其他事情是:

  • 将双引号放在模板中作为文字.完全搞砸了.
  • 使用"而不是".没有效果,无论如何我输出的文字不是html.
  • 使用和选择变量.

有什么建议?

xslt double-quotes

4
推荐指数
1
解决办法
2万
查看次数

ASP.NET控制器什么时候被销毁?

根据这个答案,ASP.NET MVC创建了一个控制器类的新实例来响应每个请求.

我的问题是,控制器实例什么时候被销毁?

到目前为止,我一直在假设(可能不正确)这些实例在每个响应结束时被销毁,但是一些数据库池问题让我认为它们可能留给了垃圾收集器.有没有人对此有任何见解?

c# asp.net-mvc garbage-collection

3
推荐指数
1
解决办法
480
查看次数

实体框架试图插入父对象

问题

我正在使用Entity Framework将复杂的对象模型添加到数据库中.我遇到一个问题,我试图插入一个子对象,EF也试图插入父对象,这导致数据库中的完整性问题.

说明

对于我的例子,我们假设我们有两个表:

  1. ShopPerformance

商店可以有许多ShopPerformance条目,ShopPerformance必须有商店,商店记录已经存在于数据库中(因此EF应该不管它并专注于ShopPerformance).

在我的示例中,我只尝试添加ShopPerformance(在这种情况下,ShopPerformance的实例称为"性能":

this.db.Entry(performance).State = System.Data.EntityState.Added;
this.db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

当我调用SaveChanges()时,EF也试图插入Shop,这会导致数据库出现约束错误,因为它有约束来防止重复输入(基于商店的名称).

我试过的事情

我已经尝试将ShopPerformance中的Shop属性设置为null以阻止EF执行我不想做的事情(它仍然将ShopID作为单独的属性).首先我试过:

Shop theShop = performance.Shop;
performance.Shop = null;
this.db.Entry(performance).State = System.Data.EntityState.Added;
this.db.SaveChanges();
performance.Shop = theShop;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,EF以某种方式重新建立商店和性能之间的链接,并尝试再次插入商店.

然后我尝试了:

Shop theShop = performance.Shop;
this.db.Entry(performance).Entity.Shop = null;
this.db.Entry(performance).State = System.Data.EntityState.Added;
this.db.SaveChanges();
this.db.Entry(performance).Entity.Shop = theShop;
Run Code Online (Sandbox Code Playgroud)

这会导致空引用异常.

期望的决议

我正在寻找一种方法来插入我的表演对象而不用EF摆弄商店.这完全打破了我的工作.

TL; DR

我希望实体框架只插入/更新我告诉它的对象,而不是任何相关对象.我怎样才能做到这一点?

c# entity-framework

2
推荐指数
1
解决办法
1295
查看次数

表格中所有单元格的CSS样式

我想将样式应用于给定表内的所有单元格(td元素),而不是任何其他表格.有没有办法在CSS中执行此操作而无需为表中的每个td指定一个类,我想将样式应用到?

例如,假设我想让特定表中的所有单元格在所有四条边上都有3px的填充.要为每个td执行此操作,我可以声明:

td { padding: 3px 3px 3px 3px; }
Run Code Online (Sandbox Code Playgroud)

问题:这适用于页面上的每个td.我只想将一个命名表应用于此,或者替代地应用于给定类的所有表.

有任何想法吗?

html css

0
推荐指数
1
解决办法
1826
查看次数