【发布时间】:2021-06-23 11:56:47
【问题描述】:
我有一个包含三个实体的应用程序:events、eventBands、bands。我在控制器类中编写了以下查询,但它似乎只返回一个结果。我希望它返回数据库中链接到该事件的所有乐队。
// EventController.cs(编辑方法)
var viewModel = new EventUpdateData();
Event et = await _context.Event.Where(e => e.EventId == id)
.Include(b => b.EventBands)
.FirstOrDefaultAsync();
viewModel.Event = et;
viewModel.EventBand = evtBand;
viewModel.Bands = et.EventBands.Select(b => b.Band).ToList();
return View(viewModel);
// EventUpdateData (ViewModel)
public class EventUpdateData
{
public Event Event { get; set; }
public EventBand EventBand { get; set; }
public IEnumerable <Band> Bands { get; set; }
}
// Edit.cshtml(选择字段的数据库中所有波段的列表)
<div class="col-sm-2">
<label for="band-list">Bands</label>
</div>
<div class="col-sm-5">
<select name="band-list" id="band-list" class="band-list form-control">
<option value="#">--Please select a band--</option>
@if (Model.Bands != null)
{
@foreach (var band in Model.Bands)
{
<option value="@band.BandId">@band.BandTitle</option>
}
}
</select>
</div>
// Edit.cshtml(与事件相关的所有乐队的列表)
<tbody class="bands">
@foreach (var band in Model.Bands)
{
var bandHours = Int32.Parse(band.BandHourlyRate) * Model.EventBand.EventBandHours;
<tr class="event-band" data-bandID="@band.BandId">
<td>
<a href="#">@band.BandTitle</a>
</td>
<td class="band-rate" data-val="@band.BandHourlyRate">
@bandHours
</td>
</tr>
}
</tbody>
// dbo.Band(数据库)
band_id band_title band_contact band_phone band_rate event_id
1 Green Fields Mike Ellery 07110291029 100 1
2 House Chicks Dave Hart 07111928193 200 1
3 Groove Surfaces Marie Penn 07566910295 150 1
(我希望查询获取所有这些波段)。
// dbo.EventBand
EventBandId EventId BandId EventBandHourlyRate
54 1 2 1
55 1 1 2
56 1 1 2
57 1 2 1
58 1 3 3
59 1 1 1
60 1 1 1
61 1 2 2
62 1 2 2
63 1 1 1
64 1 2 1
// dbo.Event(数据库)
1 Jenny's Garden Party 14/05/2021 00:00:00 Jenny Wren The Grove
2 Bob's Balloon Party 15/06/2021 00:00:00 Bob The Garden
// Event.cs
public class Event
{
public int EventId { get; set; }
public string EventTitle { get; set; }
[DataType(DataType.Date)]
public DateTime EventDate { get; set; }
public string EventCustomer { get; set; }
public string EventVenue { get; set; }
public virtual ICollection<Band> Band { get; set; }
public virtual ICollection<EventBand> EventBand { get; set; }
public virtual ICollection<EventCaterer> Caterer { get; set; }
}
// EventBand.cs
public class EventBand
{
public int EventBandId { get; set; }
public int EventBandHours { get; set; }
public int EventId { get; set; }
public int BandId { get; set; }
public virtual Event Event { get; set; }
public virtual Band Band { get; set; }
}
// Band.cs
public class Band
{
public int BandId { get; set; }
public string BandTitle { get; set; }
public string BandContact { get; set; }
public string BandPhone { get; set; }
public string BandHourlyRate { get; set; }
public virtual ICollection<EventBand> EventBand { get; set; }
}
【问题讨论】:
-
dbo.EventBand 表的内容是什么?而且,你得到的结果是什么?
-
为什么不将
ICollection变量命名为复数形式 -
数据库中链接到该事件的所有乐队。什么是“那个事件”?您没有指定事件。
-
请参阅上面的修改。我已经指定了一个事件(顶行)并列出了 EventBand 表的内容。我得到的结果是 1 Green Fields Mike Ellery 07110291029 100 1。但每次我选择不同的乐队时,我都会得到那个乐队作为一个结果。
-
检查您的运行时连接字符串是否指向您正在检查的同一个数据库。它可能指向一个数据库,该数据库只有一个乐队用于该事件。
标签: c# .net entity-framework