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()); } }