Краткое примечание
Я переименовал UserData в ExtendedProperty , и это привело к тому, что отношение от Пользователь к ExtendedProperty было названо ExtendedProperties .
Сводка изменений
- Создан метод получения / установки для FirstName и LastName в части Пользователь class
- Получил правильный элемент ExtendedProperty из коллекции ExtendedProperties и возвратил или обновил его свойство Value .
- Преобразован в формат многократного использования, как показано ниже
partial class User
{
public string FirstName
{
get { return (string)this.getExtendedProperty("FirstName").Value; }
set { this.getExtendedProperty("FirstName").Value = value; }
}
public string LastName
{
get { return (string)this.getExtendedProperty("LastName").Value; }
set { this.getExtendedProperty("LastName").Value = value; }
}
// Grab a related property out of the collection, any changes to it will be reflected in the database after a submit
private ExtendedProperty getExtendedProperty(string KeyName)
{
// grab the properties that fit the criterea
var properties = (from prop in this.ExtendedProperties where prop.KeyName == KeyName select prop);
// return value
ExtendedProperty property = properties.SingleOrDefault();
// if this is a new user then there arent going to be any properties that match
if (property == null)
{
// Define a new item to add to the collection
property = new ExtendedProperty()
{
ItemID = this.UserID,
KeyName = KeyName,
Value = String.Empty
};
// Add the item we're about to return to the collection
this.ExtendedProperties.Add(property);
}
// either way we have a valid property to return at this point
return property;
}
}
Я просто надеюсь, что это не раздутый / крайне неэффективный.
Редактировать
В getExtendedProperty , будет возникать ошибка при установке FirstName или LastName недавно созданного пользователя , потому что он не будет иметь никаких соответствующие элементы ExtendedProperty в коллекции ExtendedProperties , как показано ниже.
User expected = new User();
expected.UserID = Guid.NewGuid();
expected.UserName = "LJ";
expected.FirstName = "Leeroy"; // It would error here
expected.LastName = "Jenkins";
В связи с этим я добавил проверку, чтобы убедиться, что новые элементы добавляются в коллекцию ExtendedProperties , если они запрошены и отсутствуют в данный момент.
Я также удалил setExtendedProperty , поскольку я чувствовал, что в этом нет необходимости, и в любом случае это был всего лишь метод с 1 вкладышем.
Буду очень признателен за любой отзыв, прежде чем принять этот ответ, я оставлю его на несколько дней.