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