Zain Nabi Ответов: 1

Как вставить данные в атрибуты внешнего ключа, используя только текстовое поле


У меня есть две таблицы, как показано ниже, с внешним ключом на MainMember. У каждого члена может быть иждивенец. Я хочу вставить данные в основную таблицу элементов, используя только текстовые поля. Не раскрывающиеся списки, включая атрибуты внешнего ключа

Что я уже пробовал:

public class MainMember
{
public int Id { get;set;}
public string Name { get;set;}
public string PassportNumber { get;set;}


[ForeignKey("Dependent")]
public int DepId { get;set;}
public string DepName { get;set;}
public string DepPassportNumber { get;set;}
public Dependent Dependent {get;set;}
}


public class Dependant
{
public int Id { get;set;}
public string Name { get;set;}
public string PassportNumber {get;set}
}

I am developing an mvc application using tdd, so I have a business logic method named Insert which inherits from my repository folder

public interface IMaimMemberRepository : IDsposable
{

void Insert(Order model);

}

Thereafter I implement the above method in my MainMemberRepository class.

public void Insert(MainMemberViewModel model)
{

using(var db = new MainMemberRepository())
{
db.Insert(new MainMember
{
Name= model.Name,
PassportNumber = model.PassportNumber,
DepName= model.DepName,
DepPassportNumber = model.PassportNumber
};

)

In my controller

public ActionResult Insert(MainMemberViewModel model)
{

var business = new MainMemberBusiness();

business.Insert(model);

return View():

}

1 Ответов

Рейтинг:
0

Mike V Baker

То, как вы его настроили, ваши члены могут иметь только одного иждивенца. Вместо этого я бы предложил следующую установку.

[Key]
public int MemberId {get;set;}
public string Name {get;set;}
public string PassportNumber {get;set;}
public ICollection<Dependent> Dependents {get;set;}

Ваш иждивенец должен быть таким
[Key]
public int DependentId {get;set;}
[ForiegnKey("Member")]  {get;set;}
public int MemberId  {get;set;} // marks the member I belong to
public string Name {get;set;}
public string PassportNumber {get;set;}
public virtual Member Member {get;set;}

Я всегда использую идентификаторы, такие как MemberId и DependentId, чтобы его цель была ясна. Не требование, а личное предпочтение. Если вы просматриваете код для всех мест, где вы что-то использовали, удобно иметь это полное имя для поиска.
Таким образом, каждый зависимый имеет в себе "MemberId", так что вы (или Entity Framework или какой-то другой ORM) можете связать всех связанных зависимых с этим членом.
Ваш класс-член будет иметь ICollection<dependent> В качестве одного из своих свойств. Зависимый будет иметь свойство члена.
Чтобы иметь дело с внешним ключом, вы должны сохранить член и получить идентификатор члена после его сохранения, а затем установить идентификатор члена в каждом из зависимых элементов, прежде чем пытаться сохранить его. ORM, подобный Entity Framework, сделает это за вас.
(есть еще один вариант, который использует все, что является общим между ними в отдельной таблице под названием "Person" и Member &dependent, каждый из которых простирается от этого.)

Что касается вашего вопроса о заполнении элементов текстовыми полями, то вы не показываете никакого кода представления, поэтому я не знаю, как вам помочь.
Майк


Zain Nabi

Я использую бритву

Mike V Baker

Но этого недостаточно. Вам нужно разместить представление и код контроллера для конкретной страницы и там, где у вас возникли проблемы.