Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework: создание дополнительных свойств / 1 сообщений из 1, страница 1 из 1
26.02.2009, 19:06
    #35840400
WStealth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity Framework: создание дополнительных свойств
Здравствуйте.

Недавно начал немного разбиратся в 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:

Код: plaintext
1.
2.
3.
4.
                <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:

Код: plaintext
1.
2.
                <asp:GridView ID="gvwAddresses" runat="server" AutoGenerateColumns="True" DataSourceID="entAddresses" DataKeyNames="AddressId">
                </asp:GridView>

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

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public partial class Address : System.Data.Objects.DataClasses.EntityObject
    {
        public String FullName
        {
            get
            {
                return String.Format("{0}@{1}", this._Name, Domain.Name);
            }
        }
    }

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

Код: plaintext
1.
2.
        var i = from a in ent.Addresses
                select a.FullName;

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

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

Код: plaintext
1.
2.
3.
4.
                <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...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework: создание дополнительных свойств / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]