0

我想从 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
}
4

1 回答 1

1

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

如果你想获得一个地址,你需要从中提取它entry.Entity或从提取的信息中创建一个新实例CurrentValues

于 2013-11-03T06:53:57.493 回答