У меня есть 3 таблицы лица, адрес, personaddress человека имеет идентификатор, имя адреса идентификатор, адрес personaddress имеет PersonId, AddressID это многие ко многим все это работает отлично, если я пойдите в человека, чтобы искать по имени, удалять, обновлять, добавлять. чье-то с адресом. Однако то, что я хочу сделать, - это когда я ищу по имени, я хочу видеть, что он тянет не только имя, но и все адреса, с которыми это имя ассоциируется, и наоборот с адресом. Вот почему у меня есть таблица персонажа в качестве перекрестной ссылки. Так вот где я застрял, я не уверен, как сделать присоединение на select, потому что для этого требуется соединение на всех трех таблицах. то удаление требует от меня также удалить таблицу xref и основную таблицу. Любая помощь действительно ценится.множественное хранилище в одном контроллере
так я создал лицо, адрес, personaddress класса в Типовой папке люди
public class Person
{
public int Id {}
public string Name {}
}
адрес
public class Address
{
public int Id {}
public string Address{}
}
personaddress
public class PersonAddress
{
public int PersonId {}
public string AddressId {}
}
я также создал IPerson, iaddress, ipersonaddress класса в папке Model, Интерфейс IPerson
{
IEnumerable<Person> GetAll();
Person Get(int id);
Person Add(Person pers);
void Remove(int id);
bool Update(Person pers);
}
интерфейс IAddress
{
IEnumerable<Address> GetAll();
AddressGet(int id);
AddressAdd(Address addr);
void Remove(int id);
bool Update(Address addr);
}
интерфейс IPersonAddress
{
IEnumerable<PersonAddress> GetAll();
PersonAddressGet(int id);
PersonAddressAdd(PersonAddress persaddr);
void Remove(int id);
bool Update(PersonAddress persaddr);
}
тогда я создал personrepository, addressrepository, personaddressrepository в папке модели
public class PersonRepository : IPersonRepository
{
private List<Person> people= new List<Person>();
private int _nextId = 1;
public PersonRepository()
{
Add(new Person{ Name = "Peter Smith" });
Add(new Person{ Name = "Joe Doe" });
}
public IEnumerable<Person> GetAll()
{
return people;
}
public PersonGet(int id)
{
return people.Find(p => p.Id == id);
}
public PersonAdd(Person pers)
{
if (pers== null)
{
throw new ArgumentNullException("pers");
}
pers.Id = _nextId++;
people.Add(pers);
return pers;
}
public void Remove(int id)
{
people.RemoveAll(m => m.Id == id);
}
public bool Update(Person pers)
{
if (pers==null)
{
throw new ArgumentNullException("pers");
}
int index = people.FindIndex(p => p.Id == pers.Id);
if (index ==-1)
{
return false;
}
people.RemoveAt(index);
people.Add(pers);
return true;
}
}
, затем я добавил контроллер для этих 3 человек, адрес, персональный адрес
public class PersonController : ApiController
{
static readonly IPersonRepository repository = new PersonRepository();
public IEnumerable<Person> GetPersonByName(string name)
{
return repository.GetAll().Where(p => p.Name.ToLower().Contains(name.ToLower()));
}
public HttpResponseMessage AddPerson(Person pers)
{
pers= repository.Add(pers);
var response = Request.CreateResponse<Person>(HttpStatusCode.Created, pers);
string uri = Url.Link("DefaultApi", new { id = pers.Id });
response.Headers.Location = new Uri(uri);
return response;
}
public void UpdatePerson(int id, Person person)
{
person.Id = id;
if (!repository.Update(person))
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
public void DeletePerson(int id)
{
Person pers= repository.Get(id);
if (pers== null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
repository.Remove(id);
}
}
для шага 1 говорят, что он инициализирует его в интерфейсе? – user3731575
Нет, в вашем классе «Человек». – vortex
sorr Я новичок и пытаюсь узнать mvc и C#. Вероятно, lol должен был выбрать vb. поэтому она должна быть в [код] общественного класс Адрес { общественный ИНТ Id {} публичная строка адрес {} общественных виртуальный ICollection Людей {получить, набор;} общественных люди { Людей = новая коллекция (); } [/ code] –
user3731575