10

Я никогда раньше не использовал структуру сущности, и я хотел бы попробовать некоторые личные проекты, реализующие ее, чтобы мои ноги были мокрыми.Entity Framework и бизнес-объекты

Я вижу, что объекты могут быть выставлены слою представления. Но я не хочу, чтобы определенные поля были открыты, поля, такие как измененные даты, а также созданные даты и различные другие поля базы данных.

Как я могу реализовать бизнес-объекты и просто выставлять свойства, которые мне нужны, но при этом сохранять объекты сериализуемыми?

Кроме того, какие преимущества имеет это преимущество над LinqToSql?

ответ

22

Когда вы определяете объект в модели EDMX, вы можете указать видимость установки и getter каждого свойства, поэтому, если вы не хотите, чтобы ModifiedDate отображался на других уровнях, вы можете просто указать его как внутренний.

enter image description here

Если ваши требования являются более сложными, как ModifiedDate должны быть доступны в субъектах сборки и бизнес-логике сборке, но не в сборке пользовательского интерфейса, то вам нужно создать еще один объект, который будет обменен между бизнес-логику и логические уровни пользовательского интерфейса.

+0

Как насчет образца небольшого кода? –

+0

@Robert: Какой пример вы ожидаете? –

+0

Как вы определяете видимость получателя и сеттера каждого объекта? –

1

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

+0

Как насчет небольшой образец кода? –

+0

да. я бы хотел показать небольшой пример этого. – BastanteCaro

3

Лично используйте класс оболочки над сущностью и выставляйте или тени, что мне нужно.

// instead of below property in your BLL: 

private int m_someVariable; 

public int SomeVariable 
{ 
    get { return m_someVariable; } 
    set { m_someVariable = value; } 
} 

// You can use the entity object: 

private readonly EntityClass _entityObject = new EntityClass(); 

public int SomeVariable 
{ 
    get { return _entityObject.SomeVariable; } 
    set { _entityObject.SomeVariable = value; } 
} 

// or make it read-only at your BLL 

public int SomeVariable 
{ 
    get { return entityObject.SomeVariable; } 
    // set { entityObject.SomeVariable = value; } 
} 
+1

это похоже на то, что я искал. это можно легко сериализовать? – BastanteCaro

+0

Да, просто пометьте класс 'BLL' как' serializable' и следуйте правилам. Я думал об этом решении некоторое время, и это работало на меня. Я предпочитаю это, потому что вы можете объявить его в автономном проекте и не добавлять никакого «частичного класса» в проект сущности (в моем случае две разные команды работали над каждым проектом). Есть несколько трюков об этом решении, таких как создание двух конструкторов, один параметр-меньше, а другой - объект объекта ... – Xaqron

1
 // this is your edmx 
     Asset5Entities conx = new Asset5Entities(); 

// считают это новый список объектов Контакта, что таблица в базе данных // с использованием фреймворка сущности это таблица базы данных отображается на объект для и обрабатывать

  List$gt;Contact$lt; s = new List$gt;Contact$lt;(); 

// используя большой из LINQ Теперь и можно выбрать или запрос по любой таблице в Уре базе данных и у вас // доступ к столбцам в этом примере таблицы (E-mail) здесь

 var result = from q in conx.Contacts select q.Email; 

// вместо

 string sqlcommand = "select email from Contacts"; 
     Contact con = new Contact(); 
     con.Email= "[email protected]"; 
     con.FirstName="nader"; 

     //etc etc... 



     conx.Contacts.AddObject(con); 

     //rather than " insert into Contact values ......................" 

     //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me