private void AddEquals()
        {
            using (_cb.BeginNest("public override bool Equals(object obj)"))
            {
                _cb.AppendLine("var x = obj as " + NetName + ";");
                _cb.AppendLine("if (x == null) return false;");

                foreach (var column in _columns)
                {
                    var primaryKeyName = _namer.PrimaryKeyName(column);

                    var datatype = column.DataType ?? new DataType("x", "x");
                    //we'll only use scalar key properties
                    //if (column.IsForeignKey)
                    //{
                    //    _cb.AppendLine("if (" + primaryKeyName + " == null && x." + primaryKeyName + " == null) return ReferenceEquals(this, x);");
                    //}
                    //else
                    if (datatype.IsNumeric)
                    {
                        _cb.AppendLine("if (" + primaryKeyName + " == 0 && x." + primaryKeyName + " == 0) return ReferenceEquals(this, x);");
                    }
                    else if (datatype.IsString)
                    {
                        _cb.AppendLine("if (string.IsNullOrEmpty(" + primaryKeyName + ") && string.IsNullOrEmpty(" + primaryKeyName + ")) return object.ReferenceEquals(this, x);");
                    }
                }
                var sb = new StringBuilder();
                sb.Append("return ");
                var i = 0;
                foreach (var column in _columns)
                {
                    if (i != 0)
                    {
                        sb.Append(" && ");
                    }
                    i++;
                    var primaryKeyName = _namer.PrimaryKeyName(column);
                    sb.Append("(" + primaryKeyName + " == x." + primaryKeyName + ")");
                }
                sb.AppendLine(";");
                _cb.AppendLine(sb.ToString());
            }
        }