Проблемы при работе с полями Value-типов. Ошибка ? Фича ?
От: TheWind3 Россия  
Дата: 04.08.11 10:36
Оценка:
Проблема:
При попытке выполнить программу (см.ниже) — исключение "Cannot find converter for the 'Test.Ref' type."

База данных:
create table Entity(
  Reference UniqueIdentifier
)



Программа:
using System;
using System.Linq;

using BLToolkit.Data;
using BLToolkit.Data.Linq;
using BLToolkit.Mapping;

namespace Test {

  /// <summary>Этот тип описывает ссылку на какой-то другой объект. Предполагается, что у этого типа могут быть проблемно-ориентированные методы</summary>
  public struct Ref {
    public Guid Value;
  }

  public partial class RefMapper: MemberMapper {
    public override void SetValue(object O, object oValue) {
      Ref Value = new Ref();
      Value.Value = (Guid?)oValue ?? Guid.Empty;
      MemberAccessor.SetValue(O, Value);
    }
    public override object GetValue(object O) {
      return ((Ref)MemberAccessor.GetValue(O)).Value;
    }
  } // class RefMapper

  /// <summary>Объект - некая прикладная сущность</summary>
  public class Entity {
    //...
    // тут могут быть другие поля
    //...
    [MemberMapper(typeof(RefMapper))]
    public Ref Reference;
  }

  public class Database: DbManager {
    private const string CS = @"Data Source=ServerName;Database=DatabaseName;User=UserName;Password=UserPassword";
    public Database() : base(GetDataProvider(CS), CS) { }
    public Table<Entity> Entities { get { return GetTable<Entity>(); } }
  }

  class Program {
    public static void Main(string[] Args) {
      using(Database Db = new Database()) {
        var Q = from E in  Db.Entities select new { E.Reference };
        foreach(var E in Q)
          Console.WriteLine(E.ToString());
      }
    }
  }
}


При попытке трассировки выяснилось, что проблема возникает при обработке выражения "new { E.Reference }", метод BuildSql.
Как решить эту проблему ?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.