2015-06-12 3 views
1

Я перехожу от классического asp к .NET. Так что это может быть глупый вопрос, но я не могу найти ответа.C# автоматически сгенерированный частичный класс redefine свойство get set

У меня есть приложение MVC с использованием базы данных First и Entity Framework. Теперь я хотел бы добавить некоторую логику к автоматически генерируемым «неполным» классам. Из того, что я прочитал, должно быть связано с созданием нового частичного класса с тем же пространством имен и именем. Но когда я делаю это, я получаю сообщение об ошибке «(этот член определен более одного раза)» и «Неоднозначность между [partial class] и [partial class]». Я понимаю, что говорит об ошибке, но я не уверен, как решить проблему.

Я хотел бы добавить некоторую логику в набор; сбруя.

Таким образом, в созданном классе у меня есть

public partial class QualityChecks 
{ 
..... 
    public int DailyCount { get; set; } 
... 
} 

в моем новом частичном классе я хотел бы добавить к заданному коду, чтобы убедиться, что только значения больше чем 0 добавляются. Если добавлено отрицательное значение, его необходимо зарегистрировать и изменить на 0 , например. мой новый частичный класс:

public partial class QualityChecks { 
public int DailyCount   {   
set 
     { 
      DailyCount = value; 
      if it's < 0 log and set to 0 
     } 

    } 

Если это не ясно, может быть, это поможет: В настоящее время у меня есть нагрузок кода, который просто делает

QualityChecks qc = new QualityChecks(); 
qc.DailyCount = enteredAmount; 
.... 
db.QualityChecks.add(qc); 

Вместо затем обновить эту логику везде, было бы неплохо заверните его в класс QualityChecks.

Правильно ли это происходит? Если да, то что мне нужно изменить, чтобы сделать эту работу?

Благодарим вас за любые советы и помощь!

+0

В качестве альтернативы вы рассмотрели эту идею: сохраните эти классы сущностей только внутри вашего кода репозитория. Затем используйте что-то вроде https://github.com/AutoMapper/AutoMapper для сопоставления между этими классами сущностей и другими классами данных, которые могут содержать требуемые вами проверки. Сюда. вы избегаете проблем с частичными классами. –

+0

funtily достаточно Я использую Automapper в другом месте этого проекта, отлично работает. Я не использовал это. Вероятно, это моя неопытность, но создание нового класса и картографии кажется более беспорядочным? – jimmy

ответ

1

Вы не можете определить те же элементы в двух разных файлах.

Вы можете попытаться определить новое свойство оболочки (например, MyDailyCount), которое добавит дополнительную логику и обновит базовый объект DailyCount в конце, чтобы он сохранялся в базе данных.

public int MyDailyCount 
{ 
    get { return DailyCount; } 
    set 
    { 
     DailyCount = value; 
     // your extra logic 
    } 
} 
+0

Так что везде в моем запросе, где у меня есть qc.DailyCount = введено; необходимо будет изменить на qc.MyDailyCount = введенный параметр; ? – jimmy

+0

Да. Другими параметрами являются изменение имени свойства, сопоставленного с базой данных (например, DbDailyCount), и использование DailyCount в качестве имени для свойства оболочки. Вы можете также разделить классы, которые вы используете для объектов базы данных с объектами в вашей модели (те, которые имеют логику) и преобразовываются из одного в другой. – Juan

+0

Единственное дополнительное изменение, которое я хотел бы сделать, - сделать свойство autoGenerated приватным. Есть ли способ установить это на постоянной основе или мне придется делать это изменение каждый раз, когда я обновляю модель? – jimmy