【问题标题】:Entity Framework Custom field persistence实体框架自定义字段持久化
【发布时间】:2014-09-18 09:22:29
【问题描述】:

我正在使用实体框架和数据库优先方法。

我已经使用部分类成功添加了自定义方法,但是发现如果我添加了一个自定义字段,当我的实体下一次从DataContext 中拉出时它不会持久化(同时实体没有提交到数据库) .我需要使用此字段进行处理,但我不需要或不希望将其存储在我的数据库中。

public partial class MyEntity
{           
    public decimal MyCustomField;
}

这是为什么?我怎样才能绕过它?

谢谢

【问题讨论】:

  • 您使用的是数据库优先方法,然后更新数据库以添加列 alter table add column .. etc,然后转到 edmx 图,右键单击,从数据库更新模型
  • 感谢您的评论,尽管我在问题中确实提到我不想将此字段存储在我的数据库中。所以这不是一个合适的答案。
  • 这不是答案,而是评论,您不想将此字段存储在数据库中,您已经这样做了,字段不会保存到数据库中,只有公共属性(即映射到相关的 SSDL)
  • 关于您的评论 “这些值一直保存在 DataContext 中,直到将更改提交到数据库。这就是我想要的所有持久性” - 这是真的,直到实体从数据库中重新加载。然后您的非映射属性修改将丢失并重置为默认值。请显示相关代码和流程,以便我们回答您的实际问题。

标签: c# entity-framework custom-fields partial-classes


【解决方案1】:

您应该记住的一件事是,Entity Framework 本身并不存储值,它只是使用其来自 EDMX 的数据库知识生成 SQL 查询。持久化实际上是在数据库端实现的。

是的,您可以使用部分类向模型添加自定义方法和属性,但是由于您没有创建数据库列,因此这些属性中的值不会被持久化,因此您得到的行为是完全正常的。

我希望这会有所帮助。

【讨论】:

  • 这不是真的。 EntityFramework 确实保留了值。这些值将保留在 DataContext 中,直到将更改提交到数据库。这就是我想要的所有坚持。
  • EF 没有保留任何值,但是,如果您对任何对象进行更改,并且您想在其他函数中访问这些更改而不将它们提交给 db,则需要将相同的对象传递给那个函数。
  • EF 只是一个 ORM,所以面向对象的规则在 EF 中也是完整的。
【解决方案2】:

尝试使用属性而不是字段。

public decimal MyCustomField{get; set;}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多