当我用实体框架保存实体时,我自然认为它只会尝试保存指定的实体.但是,它也试图保存该实体的子实体.这导致了各种完整性问题.如何强制EF仅保存我要保存的实体,因此忽略所有子对象?
如果我手动将属性设置为null,则会收到错误"操作失败:由于一个或多个外键属性不可为空,因此无法更改关系." 这非常适得其反,因为我将child对象设置为null,因此EF会将其单独留下.
为什么我不想保存/插入子对象?
由于这是在评论中来回讨论,我将给出一些理由说明为什么我希望我的孩子对象保持独立.
在我正在构建的应用程序中,EF对象模型没有从数据库加载,而是用作我在解析平面文件时填充的数据对象.在子对象的情况下,其中许多引用定义父表的各种属性的查找表.例如,主要实体的地理位置.
由于我自己填充了这些对象,因此EF认为这些是新对象,需要与父对象一起插入.但是,这些定义已经存在,我不想在数据库中创建重复项.我只使用EF对象进行查找并填充主表实体中的外键.
即使子对象是真实数据,我需要首先保存父对象并获得主键或EF似乎只是搞乱了.希望这能给出一些解释.
改变整理
我需要从一个特定服务器上改变我们的数据库之一的整理Latin1_General_CI_AS,以SQL_Latin1_General_CP1_CI_AI使之我们的数据库的其他部分相匹配.

问题
但是,当我尝试这样做时,我收到以下错误:
ALTER DATABASE失败了.数据库'XxxxxXxxxxx'的默认排序规则不能设置为SQL_Latin1_General_CP1_CI_AI.(Microsoft SQL Server,错误:5075)
我的研究
我在这个主题上的Google搜索显示了一些文章,这些文章表明我需要导出所有数据,删除数据库,使用正确的排序规则重新创建数据,然后重新导入数据.
例如:数据库归类更改出现问题(SQL Server 2008)
显然这是一项重要任务,特别是因为必须保留主外键关系,并且我们的数据库非常大(超过一千万个数据行).
我的问题
有没有办法更改现有SQL Server 2012数据库的排序规则,不需要导出和重新导入所有数据?
或者,是否有一些工具或脚本能够以可靠的方式自动执行此过程?
我正在开发一个使用Entity Framework 4的.Net 4.0项目.我们的底层数据模型已经改变,我想更新Entity Framework组件,特别是模型的EDMX文件.目前我手动执行此任务,既耗时又容易出错.
有没有办法自动重新生成EDMX文件?
另外,我更希望是否重新生成模型类,因为这些类已经使用其他逻辑进行了扩展.我可以手动编辑这些类,我只想要一种自动生成EDMX文件的方法.
在数据库上执行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) 我正在构建一个内部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
我有一个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)
但是当转型运行时,我什么都没得到.它看起来和以前一样.我尝试过的其他事情是:
有什么建议?
根据这个答案,ASP.NET MVC创建了一个控制器类的新实例来响应每个请求.
我的问题是,控制器实例什么时候被销毁?
到目前为止,我一直在假设(可能不正确)这些实例在每个响应结束时被销毁,但是一些数据库池问题让我认为它们可能留给了垃圾收集器.有没有人对此有任何见解?
问题
我正在使用Entity Framework将复杂的对象模型添加到数据库中.我遇到一个问题,我试图插入一个子对象,EF也试图插入父对象,这导致数据库中的完整性问题.
说明
对于我的例子,我们假设我们有两个表:
商店可以有许多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
我希望实体框架只插入/更新我告诉它的对象,而不是任何相关对象.我怎样才能做到这一点?
我想将样式应用于给定表内的所有单元格(td元素),而不是任何其他表格.有没有办法在CSS中执行此操作而无需为表中的每个td指定一个类,我想将样式应用到?
例如,假设我想让特定表中的所有单元格在所有四条边上都有3px的填充.要为每个td执行此操作,我可以声明:
td { padding: 3px 3px 3px 3px; }
Run Code Online (Sandbox Code Playgroud)
问题:这适用于页面上的每个td.我只想将一个命名表应用于此,或者替代地应用于给定类的所有表.
有任何想法吗?
c# ×5
asp.net-mvc ×2
html ×2
sql-server ×2
.net ×1
collation ×1
css ×1
file-upload ×1
javascript ×1
linq ×1
t-sql ×1
xslt ×1