EF 4.0 - 映射为只读与私人领域的财产 [英] EF 4.0 - mapping to readonly property with private field

查看:219
本文介绍了EF 4.0 - 映射为只读与私人领域的财产的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能映射在与EF 4.0 POCO类?

 公共类MyClass的
{
  私人字符串_myData;

  公共MyClass的()
  {}

  公共MyClass的(字符串的myData)
  {
    _myData = myData的;
  }

  公共字符串迈德特
  {
    得到
    {
      返回_myData;
    }
  }
}
 

在NHibernate的我认为这是可能的,当我像映射使用Access属性:

 <类名=MyClass的表=MyTable的>
  <属性名=MyData的访问=field.camelcase下划线列=MyCol类型=字符串长度=50/>
< /类>
 

我不知道是否有某些访问等同于EF 4.0?目前,我能够映射类只如果我添加受保护的制定者到MyData的属性:

 公共字符串迈德特
  {
    得到
    {
      返回_myData;
    }
    保护套
    {
      _myData =价值;
    }
  }
 

它的工作原理,但对传统的类就意味着更新所有属性不具备的制定者。

编辑:

我已经更新了最后code的例子,因为它也不会带私人二传手工作。设定器必须被至少保护。如果二传手是私有的或不存在以下异常被抛出:

  

System.InvalidOperationException:   可以映射和元数​​据信息   无法找到的EntityType   MyNamespace.MyClass。

解决方案

我打了这一点,我的结论是:

  • 在我不能映射不具有制定者在所有的遗产类型。
  • 在我的地图,有私人二传手的类型,但我必须EDMX设置二传手访问也是如此。这是不够的定义accessibily在POCO类二传手 - EDMX必须了解它

Is it possible to map following POCO class with EF 4.0?

public class MyClass
{
  private string _myData;

  public MyClass() 
  { }

  public MyClass(string myData)
  {
    _myData = myData;
  }

  public string MyData
  {
    get
    {
      return _myData;
    }
  }
}

In NHibernate I think it is possible when I use Access attribute in mapping like:

<class name="MyClass" table="MyTable">
  <property name="MyData" access="field.camelcase-underscore" column="MyCol" type="string" length="50" />
</class>

I wonder if there is some Access equivalent in EF 4.0? Currently I'm able to map the class only if I add protected setter to the MyData property:

  public string MyData
  {
    get
    {
      return _myData;
    }
    protected set
    {
      _myData = value;
    }
  }

It works but for legacy classes it means update all properties which don't have setter.

Edit:

I have updated the last code example because it also doesn't work with private setter. Setter has to be at least protected. If the setter is private or doesn't exists following exception is thrown:

System.InvalidOperationException: Mapping and metadata information could not be found for EntityType 'MyNamespace.MyClass'.

解决方案

I played with this little bit and my conclusion is:

  • I can't map legacy types which don't have setter at all.
  • I can map types which have private setter but I must set Setter accessibility in EDMX as well. It is not enough to define setter accessibily in POCO class - EDMX must know about it.

这篇关于EF 4.0 - 映射为只读与私人领域的财产的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆