Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Entity Framework: создание дополнительных свойств  [new]
WStealth
Member

Откуда: Киев
Сообщений: 140
Здравствуйте.

Недавно начал немного разбиратся в EF.

Опишу ситуацию:

Имеем базу данных:

Первая таблица Domains:

DomainId int IDENTITY(1,1) PRIMARY KEY
Name nvarchar(50)

Вторая таблица Addresses:

AddressId int IDENTITY(1,1) PRIMARY KEY
Name nvarchar(50)
DomainId int REFERENCES Domains(DomainId) ON DELETE CASCADE ON UPDATE CASCADE

Создаем для данных таблиц модель данных EF.

Получаем два класса и переименовываем их в:

Domain
DomainId
Name
Addresses - колекция объектов Address

Address
AddressId
Name
Domain - объект Domain

С этим все ясно и понятно.

Теперь собственно, что нужно:

А нужно показать полное имя адреса в GridView, т.е. <имя адреса>@<имя домена>.

Вот что делаю для этого:

Берем EntityDataSource:

                <asp:EntityDataSource ID="entAddresses" runat="server" ConnectionString="name=myEntities" 
                    DefaultContainerName="myEntities" EntitySetName="Addresses" 
                    Select="it.[Name] + '@' + it.[Domain].[Name] AS [Name], it.[AddressId]">
                </asp:EntityDataSource>

Далее GridView:

                <asp:GridView ID="gvwAddresses" runat="server" AutoGenerateColumns="True" DataSourceID="entAddresses" DataKeyNames="AddressId">
                </asp:GridView>

Показывается все отлично.

Но, например, нужно часто получать полный адрес.

Можно в объект Address добавить свойство в другом файле (что бы дизайнер его не затирал):

    public partial class Address : System.Data.Objects.DataClasses.EntityObject
    {
        public String FullName
        {
            get
            {
                return String.Format("{0}@{1}", this._Name, Domain.Name);
            }
        }
    }

И теперь, если мы имеем дело с Linq запросом то все просто:

        var i = from a in ent.Addresses
                select a.FullName;

А вот если продолжать использовать EntityDataSource, можно ли добратся до этого свойства?

Выражение типа:

                <asp:EntityDataSource ID="entAddresses" runat="server" ConnectionString="name=myEntities" 
                    DefaultContainerName="myEntities" EntitySetName="Addresses" 
                    Select="it.[FullName], it.[AddressId]">
                </asp:EntityDataSource>

говорит, что нет этого FullName :

[quote]
"FullName" не является элементом типа myModel.Address в загруженных в данный момент схемах
[/quote]

Значит выход один - использовать Linq?

Let the Force be with You...
26 фев 09, 19:06    [6866684]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить