【问题标题】:Mapping object type property to varbinary(MAX) in Entity Framework在实体框架中将对象类型属性映射到 varbinary(MAX)
【发布时间】:2015-05-27 07:02:54
【问题描述】:

我有一个类型的属性为object 的类型,例如。

public class MyType
{
   public virtual object MyProp{get; get;}
}

这种类型必须是:

  1. 使用Entity Framework 保存到数据库中,作为byte[](我已经弄清楚了序列化逻辑)
  2. 通过 WCF 传输(我将使用KnownType 属性)

如何映射我的object 属性以确保将其转换为字节数组进行存储?

注意:object 属性将是一个值类型(非复杂)

我想创建一个单独的类型来保存到数据库,例如:

public class MyTypeEntity
{
   public virtual byte[] MyProp{get; get;}
}

如何在类型之间进行转换/翻译,同时仍然能够定义关系映射?

这是否涉及某种对保存的拦截?

我能想到的最好的解决方案就是将序列化的数据简单地存储在数据库中。

如果在 C# 中有某种形式的 property covariance,也许这会更容易。据我所知,它不存在。 如果有我可以使用的优雅替代方案,我将不胜感激。

【问题讨论】:

    标签: c# entity-framework wcf ef-fluent-api


    【解决方案1】:

    我建议在您的实体上保留 byte[] 字段;你的班级应该尽可能地模仿数据库结构。我过去做过类似的事情的一种方法是创建一个单独的类文件(请记住,您的实体是partial)并将NotMapped 属性添加到第二个文件。您可以让 getter 和 setter 进行从 objectbyte[] 的转换,并且在您的代码中,始终与 EF 将忽略的 object 属性进行交互。这非常轻松,EF 仍会将varbinary 字段跟踪到您不直接访问的byte[]

    【讨论】:

    • 好主意!绝对无痛。不知道我可以使用部分(EF新手)。谢谢@DrewJordan
    • 如果您愿意,可以将其包含在第一个文件中...不过我喜欢单独保留数据库模型。
    • 会看看团队更能接受什么,否则我也有同样的看法。我是否必须放置任何属性装饰以确保它没有被映射?或者只是不映射就足够了?
    • 是的,属性是NotMapped,在您的新属性上。
    • 知道了。错过了那个。谢谢!
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2015-12-07
    • 2017-09-20
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多