无法将System.Data.Objects.ObjectStateEntryDbUpdatableDataRecord类型的对象强制转换为ComplexType

时间:2013-11-02 23:31:21

标签: entity-framework-5

我想从ObjectStateEntry获取一个字符串值并拥有以下转换器。 我的客户类有一个复杂类型的地址字段。但是我的代码无法解决这个问题。

   private static string EntryToString( ObjectStateEntry entry, string fieldName, Context Db)
    {
        try
        {
            string fieldValue = "";
            int ordinal = 0;
            var createdField = entry.CurrentValues.DataRecordInfo.FieldMetadata.FirstOrDefault(f => f.FieldType.Name == fieldName);
            var fieldType = createdField.FieldType.TypeUsage.EdmType.Name;
            ordinal = createdField.Ordinal;
            switch (fieldType)
            {
                case "String":   
                    fieldValue = entry.CurrentValues[ordinal].ToString();
                    break;
                case "Address"
                    var obj = entry.CurrentValues[ordinal];

                    var adr = (Address)obj; // error occurs here

                    fieldValue = Serialize(adr);  // converts to string

                    break;
               // other cases
           } 
          return fieldValue
    }

错误讯息是

  System.InvalidCastException: Unable to cast object of type 'System.Data.Objects.ObjectStateEntryDbUpdatableDataRecord' to type '.DomainClasses.Address'.

域类

public class Customer
{
    public Customer()
    {
        this.Address = new Address();
    }
    // other fields
 }

[ComplexType]
[Serializable]
public class Address
{
    public string AddressLine1 { get; set; }
    // other fields
}

1 个答案:

答案 0 :(得分:1)

CurrentValues集合不包含您的域类型的实例。它有自己的统一表示,独立于您的域模型,因此您无法将其数据类型转换为您的类型。

如果您想获取地址,则需要从entry.Entity中提取地址,或者从CurrentValues提取的信息中创建新实例