首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止EF 5生成属性

阻止EF 5生成属性
EN

Stack Overflow用户
提问于 2013-09-08 00:58:39
回答 2查看 98关注 0票数 2

我首先使用带有分部类的EF5数据库。在我的分部类中有一个属性,它包含n个对象,该对象存储为包含XML数据的数据库中的一个列。当EF尝试使用自定义的getter/setter读取/写入该对象时,我希望处理该对象的序列化/反序列化。

是否可以公开我的分部类中的列,并使用EF映射它,而不自动为它生成属性?

即:

代码语言:javascript
复制
public SomeObject BigComplexObject { get; set; } // forms etc in my app use this
public string BigComplexObjectString // when the EF tries to read/write the column, my custom getter/setter kicks in
{
    get { return this.BigComplexObject.ToXmlString(); }
    set { this.BigComplexObject  = new BigComplexObject(value); }
}

目前,EF正在为该列自动生成一个成员,因此我只剩下两个成员。

EN

回答 2

Stack Overflow用户

发布于 2013-09-08 03:01:59

试着改变逻辑。保留EF生成的属性,该属性将由数据库中的XML字符串填充:

代码语言:javascript
复制
public string BigComplexObjectString { get; set; }

然后执行以下操作:

代码语言:javascript
复制
[NotMapped]
public SomeObject BigComplexObject
{
    get { return new SomeObject(this.BigComplexObjectString); }
    set { this.BigComplexObjectString = value.ToXmlString(); }
}

不要忘记添加NotMapped来指示EF忽略此属性。

票数 0
EN

Stack Overflow用户

发布于 2013-09-08 03:02:06

好吧,我们在一个非常相似的案例中使用了一个小技巧...

我们使用...的属性面板(在edmx文件中)。属性,并在“文档”(摘要或详细描述)行中添加一些内容(可能不是最佳位置,但不管怎样)。这可以由您的T4文件访问。

因此,您可以在属性面板中编写类似"useXml“的内容,然后修改tt以生成所需的代码(例如获取.tt文件中的信息)

代码语言:javascript
复制
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary = "useXml")
  //generate something special

如果能在edmx中有一个更好的位置来存放"cusom infos“,那就太好了,但是我们没有找到更好的即时服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18675728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档