Как связать реляционные данные из SQL-Server с сущностью с отношением один-ко-многим - PullRequest
0 голосов
/ 25 апреля 2019

Я использую entity-framework6 с ядром .net.У меня были некоторые сложные вычисления, чтобы получить некоторые результаты из базы данных, поэтому я создал хранимую процедуру в базе данных, которая дает мне список свойств, как на выходе.Я успешно связал данные с Property Object из базы данных результата.как показано ниже

Хранимая процедура

ALTER PROCEDURE [dbo].[PublicPropertySearch] 
    @Latitude float,
    @Longitude float,
    @Radius float = NULL,
    @HavePets bit = NULL,
    @FullBathroomCount int = NULL,
    @BedroomCount int = NULL,
    @RentPriceFrom int = NULL,
    @RentPriceTo int = NULL,
    @PropertyTypeId int = NULL

AS
BEGIN

declare @Geography geography = GEOGRAPHY::Point(@Latitude , @Longitude , 4326);

    SET NOCOUNT ON;
    select top 50 * from dbo.Property p
    --inner join dbo.PropertyFile f on f.PropertyId = p.PropertyId and f.IsPhoto = 1
    where GeoLogic.STDistance(@Geography)/1609.344 < @Radius
    and (@HavePets is null or p.HavePets = @HavePets)
    and (@FullBathroomCount is null or p.FullBathroomCount = @FullBathroomCount)
    and (@BedroomCount is null or p.BedroomCount = @BedroomCount)
    and (@RentPriceFrom is null or p.ExpectedRentalPrice > @RentPriceFrom)
    and (@RentPriceTo is null or p.ExpectedRentalPrice < @RentPriceTo)
    and (@PropertyTypeId is null or p.PropertyTypeId = @PropertyTypeId)

    --EXEC PublicPropertySearch @Latitude=28.609255,@Longitude=-81.250135,@Radius=5

END

Код для привязки результата с сущностью

var Properties = db.Database.SqlQuery<PublicPropertySearchResult>("exec PublicPropertySearch @Latitude, @Longitude, @Radius, @HavePets, @FullBathroomCount, @BedroomCount, @RentPriceFrom, @RentPriceTo, @PropertyTypeId", sp.ToArray()).ToList();

вот моймодель свойства

    class PublicPropertySearchResult
    {
        public int PropertyId { get; set; }
        public string Title { get; set; }
        public string StreetAddress { get; set; }
        public string Description { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public int BedroomCount { get; set; }
        public double Latitude { get; set; }
        public double Longitude { get; set; }
        public string State { get; set; }
        public double ExpectedRentalPrice { get; set; }
        public string Country { get; set; }
        public string Area { get; set; }
        public string AreaUnit { get; set; }
        public int FullBathroomCount { get; set; }
        public string LandlordCurrency { get; set; }
        public string ZipCode { get; set; }
        public int PropertyTypeId { get; set; }
    }

Это вывод моей хранимой процедуры

PropertyId  Title   Description Address StreetAddress   City    State   Country ZipCode Latitude    Longitude   HideStreetAddress   PropertyTypeId  ListingTypeId   Area    AreaUnit    BedroomCount    FullBathroomCount   HalfBathroomCount   Laundry IsFurnished HasParking  SitePaymentEnabled  TotalTenantsLiving  ExpectedRentalPrice HavePets                                                                    
163 3 Bed With Parking Features:(Assigned,Boat,Covered) Flooring: (Carpet,Ceramic Tile)     NULL    NULL    CASSELBERRY NULL    US  32707   28.636128   -81.320118  1   1   6   2811    NULL    3   3   0   Upper Level 0   1   NULL    NULL    220000  1                                                                       
234 4 Bed With Parking Features:(Other) Flooring: (Porcelain Tile)      NULL    NULL    WINTER PARK NULL    US  32789   28.599719   -81.331453  1   2   6   4715    NULL    4   5   1       0   1   NULL    NULL    1190900 0                                                                                                               
448 3 Bed  Flooring: (Terrazzo)     NULL    NULL    ORLANDO NULL    US  32817   28.609255   -81.250135  1   2   6   2016    NULL    3   2   0   Inside,Laundry Closet   0   0   NULL    NULL    415000  1                                       
515 3 Bed  Flooring: (Carpet,Ceramic Tile)      NULL    NULL    MAITLAND    NULL    US  32751   28.630359   -81.320365  1   3   6   NULL    NULL    3   2   1   Laundry Closet,Upper Level  0   0   NULL    NULL    269900  1

из этого кода. Я получаю только объект свойства из таблицы свойств. Теперь я также хочу связать объект Files сТаблица PropertyFiles в базе данных (существует связь между PropertyFiles и Property таблицами в базе данных).

Мой вопрос заключается в том, какой тип вывода требуется из базы данных для привязки объекта PropertyFilesтакже.в сущности, указанной ниже

    class PublicPropertySearchResult
    {
        public int PropertyId { get; set; }
        public string Title { get; set; }
        public string StreetAddress { get; set; }
        public string Description { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public int BedroomCount { get; set; }
        public double Latitude { get; set; }
        public double Longitude { get; set; }
        public string State { get; set; }
        public double ExpectedRentalPrice { get; set; }
        public string Country { get; set; }
        public string Area { get; set; }
        public string AreaUnit { get; set; }
        public int FullBathroomCount { get; set; }
        public string LandlordCurrency { get; set; }
        public string ZipCode { get; set; }
        public int PropertyTypeId { get; set; }
        public virtual ICollection<PropertySearchFile> Files { get; set; }
    }

    public class PropertySearchFile
    {
        public int PropertyFileId { get; set; }
        public string FileUrl { get; set; }
        public string FileName { get; set; }
        public virtual PublicPropertySearchResult Property { get; set; }
    }

1 Ответ

0 голосов
/ 25 апреля 2019

Чтобы идентифицировать «одну» часть отношения, часть «многие» должна содержать идентификатор «единицы».Обычно это делается так:

public class PropertySearchFile
    {
        public int PropertyFileId { get; set; }
        public string FileUrl { get; set; }
        public string FileName { get; set; }

        public int PropertyId { get; set; } //THat is assuming that PropertyId is the PK for the PublicPropertySearchResult class 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...