- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个包含以下列的 db 表。
exec Widget_Insert @WidgetName='Foo Widget'
modelBuilder.Entity<Widget>()
.MapToStoredProcedures(s =>
s.Insert(i => i.HasName("Widget_Insert")
.Parameter(a => a.WidgetName, "WidgetName")
.Parameter(a => a.WidgetCreatedOn, **dont map it**)
.Parameter(a => a.WidgetLastUpdatedOn, **dont map it**)));
最佳答案
虽然可能有一种方法可以手动更改 MapToStoredProcedures 配置来执行此操作,但我还没有发现它。话虽如此,有一种方法可以实现这一点,我认为这就是 EF 期望您做事的方式。
在您的模型映射中,指定 Identity 或 Computed 的 DatabaseGeneratedOption 将阻止将该属性发送到插入过程。
如果你仔细想想,这是有道理的。插入过程将从模型中获取尽可能多的信息来进行插入。但是 Identity/Computed 属性是您说 DB 将为其提供数据的属性,因此它不会查找该数据的模型。
这种方法有几点需要注意。 EF 会期望那些 Identity/Computed 字段从 proc 返回,因此您需要在插入后进行选择(在 sql server 中对 SCOPE_IDENTITY() 进行过滤)。 EF 还假设 Identity 字段不会返回为 null,因此即使您不打算稍后更新它们,也必须计算这些字段。
如果这些都不是很好吃,那么在 EF5 中做这种事情的方法(并且更灵活一点)是覆盖上下文上的 SaveChanges 并在类型为 Widget 且为 EntityState.Added 时调用 proc。或者你可以抛出一个异常来强制开发人员自己调用 proc,而不是使用 EF 的 DBSet Add 方法。
关于entity-framework - Entity Framework MapToStoredProcedures - 忽略参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218014/
我们有一个包含以下列的 db 表。 WidgetId (PK) 小部件名称 WidgetCreatedOn 小部件上次更新时间 我们有处理小部件表上的更新/删除/插入的存储过程。 插入存储过程需要 只
没有MapToStoredProcedures在 EF Core 中这是一个遗憾,因为它允许 Add隐藏是否使用存储过程的方法。 我查看了 EF Core 3.1 和 5,但找不到推荐的替代品。因此,
我是一名优秀的程序员,十分优秀!