У меня есть таблица, называемая учетными записями, которая приведена ниже:
[Key]
public int SiteID { get; set; }
[Key]
public long AccountID { get; set; }
public string Name { get; set; }
public string AccountCode { get; set; }
public string AccountType { get; set; }
Я пытаюсь использовать Entity Framework для отображения информации в таблице, где SiteID = 999999. Я пытаюсь использовать метод db.Find для отображения списка "учетных записей", где siteID = 999999.
Мой текущий код: index.cshtml
@Html.ActionLink("Mapping","ConfigureMapping", new { id = item.SiteID })
контроллер
Account account = SiteDatabase.Accounts.Find(id);
if (account == null)
{
return HttpNotFound();
}
return View(account);
Но это жалуется только на получение 1 из 2 первичных ключей: "Количество переданных первичных ключей должно соответствовать количеству значений первичного ключа, определенных на объекте".
Как мне это сделать???
Метод Find
возвращает единственный объект, а не коллекцию. Если вам нужны все записи с SiteID = 999999, используйте метод Where
чтобы получить отфильтрованный список.
Например,
List<Account> accountList = SiteDatabase.Accounts.Where(a=>a.SiteID==id).ToList();
где id
имеет значение 999999
или какое-либо другое действительное значение идентификатора сайта
Если вам нужен один элемент, вы можете использовать FirstOrDefault
в качестве альтернативного варианта Find
Account account = SiteDatabase.Accounts.FirstOrDefault(a=>a.SiteID==id);
Имейте в виду, что это вернет первое совпадение. Поэтому, если у вас есть 2 записи с одинаковым значением SiteID
(но с другим AccountID
), он просто вернет первый, который может и не быть тем, который вы ищете. Поэтому я предлагаю вам получить запись на основе уникального значения ключа (уникальные комбинации комбинаций клавиш). Возможно, вы также можете передать идентификатор учетной записи из ui и использовать ее (вместе с siteId) для получения отдельного объекта -correct по мере необходимости.
Вам также нужно поставить другой ключ в find, сначала добавьте его в actionlink:
@Html.ActionLink("Mapping","ConfigureMapping", new { id = item.SiteID, accountID = item.AccountID })
Добавьте параметр в свой контроллер, а затем используйте его в поиске как таковой:
Account account = SiteDatabase.Accounts.Find(id, accountID);
1[MultiTenantWebApp.Models.Account]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [Xero.Api .Core.Model.Account]. Я пытался. AsEnumerable (), но не повезлоMultiTenantWebApp.Models.Account
, но он принимает список объектовXero.Api.Core.Model.Account