将对象类型 属性 映射到 Entity Framework 中的 varbinary(MAX)
Mapping object type property to varbinary(MAX) in Entity Framework
我有一种情况,我有一个 属性 类型 object
的类型,例如
public class MyType
{
public virtual object MyProp{get; get;}
}
这种类型必须是:
- 使用
Entity Framework
保存到数据库,作为 byte[]
(我已经弄清楚序列化逻辑)
- 通过WCF传输(我会使用
KnownType
属性)
如何映射我的 object
属性 以确保将其转换为字节数组进行存储?
N.B: object
属性 将是一个值类型(非复数)
我想创建一个单独的类型来保存到数据库中,例如:
public class MyTypeEntity
{
public virtual byte[] MyProp{get; get;}
}
如何在类型之间 convert/translate 同时仍然能够定义关系映射?
这是否涉及对保存的某种拦截?
我能想到的最好的解决方案就是将序列化数据简单地存储在数据库中。
如果 C# 中有某种形式的 property covariance
,也许这会更容易。据我所知,它不存在。
如果有我可以使用的优雅替代方案,我将不胜感激您的见解。
我建议在您的实体上保留一个 byte[]
字段;您的 class 应该尽可能地模仿数据库结构。我过去做过类似的事情的一种方法是创建一个单独的 class 文件(记住,你的实体是 partial
)并添加一个 NotMapped
属性 到第二个文件。您可以让 getter 和 setter 进行从 object
到 byte[]
的转换,并且在您的代码中,始终与 object
属性 交互EF 将忽略。这非常轻松,EF 仍会跟踪 varbinary
字段到您不直接访问的 byte[]
。
我有一种情况,我有一个 属性 类型 object
的类型,例如
public class MyType
{
public virtual object MyProp{get; get;}
}
这种类型必须是:
- 使用
Entity Framework
保存到数据库,作为byte[]
(我已经弄清楚序列化逻辑) - 通过WCF传输(我会使用
KnownType
属性)
如何映射我的 object
属性 以确保将其转换为字节数组进行存储?
N.B: object
属性 将是一个值类型(非复数)
我想创建一个单独的类型来保存到数据库中,例如:
public class MyTypeEntity
{
public virtual byte[] MyProp{get; get;}
}
如何在类型之间 convert/translate 同时仍然能够定义关系映射?
这是否涉及对保存的某种拦截?
我能想到的最好的解决方案就是将序列化数据简单地存储在数据库中。
如果 C# 中有某种形式的 property covariance
,也许这会更容易。据我所知,它不存在。
如果有我可以使用的优雅替代方案,我将不胜感激您的见解。
我建议在您的实体上保留一个 byte[]
字段;您的 class 应该尽可能地模仿数据库结构。我过去做过类似的事情的一种方法是创建一个单独的 class 文件(记住,你的实体是 partial
)并添加一个 NotMapped
属性 到第二个文件。您可以让 getter 和 setter 进行从 object
到 byte[]
的转换,并且在您的代码中,始终与 object
属性 交互EF 将忽略。这非常轻松,EF 仍会跟踪 varbinary
字段到您不直接访问的 byte[]
。