Exemplo n.º 1
0
        public void Initialize(DbInstance db)
        {
            // simple or already known type
            DbType = DbTypes.TryGetDbType(MemberType);
            if (DbType != null)
            {
                return;
            }

            // reference
            {
                var key = db.GetKeyType(MemberType);
                if (key != null)
                {
                    DbType = DbTypes.GetDbType(key);
                    return;
                }
            }

            // dictionary of references
            {
                var elements = DbTypes.GetDictionaryElementTypes(MemberType);
                if (elements != null)
                {
                    var key   = db.GetKeyType(elements.Item1) ?? elements.Item1;
                    var value = db.GetKeyType(elements.Item2) ?? elements.Item2;
                    DbType = DbTypes.GetDbType(typeof(Dictionary <,>).MakeGenericType(key, value));
                    return;
                }
            }

            // collection of references
            {
                var element = DbTypes.GetCollectionElementType(MemberType);
                if (element != null)
                {
                    var key = db.GetKeyType(element);
                    if (key != null)
                    {
                        DbType = DbTypes.GetDbType(key.MakeArrayType());
                        return;
                    }
                }
            }

            throw new NotSupportedException(string.Format("Serialization of '{0}' is not supported", MemberType));
        }