- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 EF 不是很满意,所以这可能很简单。
我有
public void DeleteLicense(int licenseId)
{
var entityToDelete = context.Licenses.Find(licenseId);
context.Licenses.Remove(entityToDelete);
}
我检查过它找到了正确的许可证,上下文是一个 ninject(每个请求一个)DbContext,
但是当我在运行上面的函数后在上下文中调用 SaveChanges() 时,我得到了一个奇怪的错误。我得到:“CustomerName 字段是必需的。”
现在这很奇怪,因为 CustomerName 在帐户(而不是许可证)中,它们是链接的,但仍然。所以这里还有一些:
我的帐户实体
[Required]
public String CustomerName { get; set; }
public virtual ICollection<License> Licenses { get; set; }
...
我的许可证实体
public virtual Account Account { get; set; }
...
我的流畅设置
modelBuilder.Entity<Account>().HasMany(x => x.Licenses)
.WithRequired(x => x.Account).WillCascadeOnDelete(false);
我不明白,因为即使约束失败了,为什么还缺少 CustomerName。当我删除许可证时,我没有触及 CustomerName,并且 CustomerName 是以前设置的。
更新
下面是代码中的更多细节。据我所知,完整的执行路径是
下面的DeleteLicenseAPI 接受调用,ID 正确,它传递给私有(private)函数。私有(private)函数调用靠近问题顶部显示的 DeleteLicense。Commit() 仅调用 context.SaveChanges();
public ActionResult DeleteLicenseAPI(int licenseId)
{
if (DeleteLicense(licenseId))
{
return Content("ok");
}
return Content("[[[Failed to delete license]]]");
}
private bool DeleteLicense(int licenseId)
{
//todo: sort out busniess rules for delete, is cascaded?
_accountRepository.DeleteLicense(licenseId);
_accountRepository.Commit();
return true;
}
_accountRepository 看起来像这样
public class EFAccountRepository : EntityFrameworkRepository<Account>
, IAccountRepository
public EFAccountRepository(EvercateContext context) : base(context)
{
}
这里是 Ninject 中的代码,用于设置这一切
kernel.Bind<EvercateContext>()
.To<EvercateContext>()
.InRequestScope()
.WithConstructorArgument("connectionStringOrName", "EvercateConnection");
kernel.Bind<IAccountRepository>().To<EFAccountRepository>();
因此,即使我在运行 SaveChanges 之前,据我所知(并且不应该)使用工作单元,也不会在此请求中调用任何其他内容。有什么方法可以查看 DbContext 将在 SaveChanges 上做什么,而无需实际运行该方法(因为它会抛出 DbEntityValidationException)
最佳答案
我可以想象,如果您像这样在 License
构造函数中初始化 Account
导航属性,可能会发生这种奇怪的异常:
public License
{
Account = new Account();
}
调用时的流程...
var entityToDelete = context.Licenses.Find(licenseId);
context.Licenses.Remove(entityToDelete);
...那么可能是:
License
实体被加载(没有导航属性 Account
)并附加到上下文(状态 Unchanged
)Account
导航属性,但它没有被附加(状态 Detached
)License
实体调用 Remove
时,EF 在内部调用了 DetectChanges
。它检测到 License.Account
正在引用一个分离的实体并将其附加到上下文(处于 Added
状态)。 License
的状态更改为 Deleted
。SaveChanges
时,更改跟踪器发现两个实体:状态为 Deleted
的 License
和 Account
处于状态已添加
。Account
所需的属性 CustomerName
是 null
(因为仅调用 Account
的默认构造函数。我不确定细节是否正确,但类似的事情可能正在发生。
在任何情况下,您都应该从 License
构造函数中删除 Account = new Account();
并检查您是否初始化了其他reference代码库中实体构造函数中的导航属性也是如此。 (初始化空导航 集合 是可以的。)这是众所周知的奇怪问题的常见来源,很难找到和理解。
关于c# - 无法删除具有所需父属性的 ef 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450208/
都是整数,但一直报错 "Only assignment, call, increment, decrement, await, and new object expressions can be us
我有以下情况:一个“对话”实体/表,它有多个关联的标签。Tag 也是一个实体/表 - key/id 是 tagName(一个字符串)。 在客户端 (javascript),我在处理标签时使用字符串数组
我想通过 maven java 源代码生成器自动生成 java 源代码。我想通过查看一个大实体 xml 文件来创建实体类,该文件将包含系统中的所有实体和实体关系。据我搜索,目前maven中没有这样的插
我有一段时间有这个疑问,有人说 EJB 3.0 中没有所谓的实体 bean。有没有可能这样说,EJB 3.0 使用 JPA 来持久化数据并且没有对以前版本(EJB 2.1)中的实体 bean 进行增强
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
实体(entites) 用于定义引用普通文本或特殊字符的快捷方式的变量,可在内部或外部进行声明 实体引用是对实体的引用 声明一个内部实体 语法: <!ENTITY 实体名称 "
This page建议 !ENTITY: If you want to avoid duplication, consider using XML entities (for example, [ ]
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我使用 Symfony2 和 Doctrine,我有一个关于实体的问题。 出于性能方面的考虑,我想知道是否可以在不进行所有关联的情况下使用实体? 目前,我还没有找到另一种方法来创建继承带有关联的类的模
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
我在 grails 中有一个域类......我如何让 gorm 在创建数据库时忽略这个实体?就别管它了。 最佳答案 如果我理解,你不想从域类创建表?如果是,请在域类中使用此代码: static map
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
如何在我的实体中以 14-04-2017 格式存储日期? 但我必须从字符串中解析它。 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-
我需要从两个连接表中获取数据。数据集是什么类型?我是否需要创建一个包含这两个表中的属性的类以用于数据集类型,或者我可以使用实体模式中的类型。我如何修改我的方法才能正常工作? public static
好的,我们正在尝试建立一个中央站点来查看来自销售我们产品的多个供应商的数据。这些多个供应商使用不同的销售系统(确切地说是两个不同的系统),因此每个数据库看起来完全不同。我们与他们的数据库同步,因此数据
我是 backbone 的新手。但是当我研究模型实体时,我不明白一些事情。如果我们可以像 java 或 C# 这样的标准语言一样定义模型属性,那就太好了。有没有可能是这样的。所以我的想法是这样的: M
我想获取存储在可绘制的 xml 文件中的形状的颜色。 我来到了将 Drawable 存储在 Drawable 变量中的步骤,所以,现在我想获取形状的颜色(纯色标签)。 有什么建议吗? 最佳答案 Gra
实体是直接映射到我们的数据库(我们用于 Hibernate)的类。 在调用 DAO 之前,我们的服务类包含这些实体的业务逻辑。 我们还有命令对象,它们是与特定 View 相关的 POJO。有人告诉我实
在我的应用程序中,我需要显示不同存储过程返回的记录列表。每个存储过程返回不同类型的记录(即列数和列类型不同)。 我最初的想法是为每种类型的记录创建一个类,并创建一个函数来执行相应的存储过程并返回 Li
我是一名优秀的程序员,十分优秀!