Ejemplo n.º 1
0
        /// <summary>
        /// Writes property accessor
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="property"></param>
        /// <param name="relatedAssociations"></param>
        /// <param name="context"></param>
        protected virtual void WriteClassPropertyAccessors(CodeWriter writer, Column property, IEnumerable <Association> relatedAssociations, GenerationContext context)
        {
            //generate [Column(...)] attribute
            var column = NewAttributeDefinition <ColumnAttribute>();

            column["Storage"] = property.Storage;
            column["Name"]    = property.Name;
            column["DbType"]  = property.DbType;
            // be smart: we only write attributes when they differ from the default values
            var columnAttribute = new ColumnAttribute();

            if (property.IsPrimaryKey != columnAttribute.IsPrimaryKey)
            {
                column["IsPrimaryKey"] = property.IsPrimaryKey;
            }
            if (property.IsDbGenerated != columnAttribute.IsDbGenerated)
            {
                column["IsDbGenerated"] = property.IsDbGenerated;
            }
            if (property.AutoSync != DbLinq.Schema.Dbml.AutoSync.Default)
            {
                column["AutoSync"] = new EnumFullname("AutoSync", property.AutoSync);
            }
            if (property.CanBeNull != columnAttribute.CanBeNull)
            {
                column["CanBeNull"] = property.CanBeNull;
            }
            if (property.Expression != null)
            {
                column["Expression"] = property.Expression;
            }

            var specifications = property.AccessModifierSpecified
                                     ? GetSpecificationDefinition(property.AccessModifier)
                                     : SpecificationDefinition.Public;

            if (property.ModifierSpecified)
            {
                specifications |= GetSpecificationDefinition(property.Modifier);
            }

            //using (WriteAttributes(writer, context.Parameters.MemberExposedAttributes))
            using (WriteAttributes(writer, GetAttributeNames(context, context.Parameters.MemberAttributes)))
                using (writer.WriteAttribute(NewAttributeDefinition <DebuggerNonUserCodeAttribute>()))
                    using (writer.WriteAttribute(column))
                        using (writer.WriteProperty(specifications, property.Member, GetTypeOrExtendedType(writer, property)))
                        {
                            // on auto storage, we're just lazy
                            if (property.Storage == null)
                            {
                                writer.WriteAutomaticPropertyGetSet();
                            }
                            else
                            {
                                using (writer.WritePropertyGet())
                                {
                                    writer.WriteLine(writer.GetReturnStatement(writer.GetVariableExpression(property.Storage)));
                                }
                                using (writer.WritePropertySet())
                                {
                                    WriteClassPropertyAccessorSet(writer, property, relatedAssociations, context);
                                }
                            }
                        }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Writes property accessor
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="property"></param>
        /// <param name="relatedAssociations"></param>
        /// <param name="context"></param>
        protected virtual void WriteClassPropertyAccessors(CodeWriter writer, Column property, IEnumerable<Association> relatedAssociations, GenerationContext context)
        {
            //generate [Column(...)] attribute
            var column = NewAttributeDefinition<ColumnAttribute>();
            column["Storage"] = property.Storage;
            column["Name"] = property.Name;
            column["DbType"] = property.DbType;
            // be smart: we only write attributes when they differ from the default values
            var columnAttribute = new ColumnAttribute();
            if (property.IsPrimaryKey != columnAttribute.IsPrimaryKey)
                column["IsPrimaryKey"] = property.IsPrimaryKey;
            if (property.IsDbGenerated != columnAttribute.IsDbGenerated)
                column["IsDbGenerated"] = property.IsDbGenerated;
            if (property.AutoSync != DbLinq.Schema.Dbml.AutoSync.Default)
                column["AutoSync"] = new EnumFullname("AutoSync", property.AutoSync);
            if (property.CanBeNull != columnAttribute.CanBeNull)
                column["CanBeNull"] = property.CanBeNull;
            if (property.Expression != null)
                column["Expression"] = property.Expression;

            var specifications = property.AccessModifierSpecified
                                     ? GetSpecificationDefinition(property.AccessModifier)
                                     : SpecificationDefinition.Public;
            if (property.ModifierSpecified)
                specifications |= GetSpecificationDefinition(property.Modifier);

            //using (WriteAttributes(writer, context.Parameters.MemberExposedAttributes))
            using (WriteAttributes(writer, GetAttributeNames(context, context.Parameters.MemberAttributes)))
            using (writer.WriteAttribute(NewAttributeDefinition<DebuggerNonUserCodeAttribute>()))
            using (writer.WriteAttribute(column))
            using (writer.WriteProperty(specifications, property.Member, GetTypeOrExtendedType(writer, property)))
            {
                // on auto storage, we're just lazy
                if (property.Storage == null)
                    writer.WriteAutomaticPropertyGetSet();
                else
                {
                    using (writer.WritePropertyGet())
                    {
                        writer.WriteLine(writer.GetReturnStatement(writer.GetVariableExpression(property.Storage)));
                    }
                    using (writer.WritePropertySet())
                    {
                        WriteClassPropertyAccessorSet(writer, property, relatedAssociations, context);
                    }
                }
            }
        }