我想从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
}
答案 0 :(得分:1)
CurrentValues
集合不包含您的域类型的实例。它有自己的统一表示,独立于您的域模型,因此您无法将其数据类型转换为您的类型。
如果您想获取地址,则需要从entry.Entity
中提取地址,或者从CurrentValues
提取的信息中创建新实例