Зачем нам нужно объявлять свойство, чтобы присвоить атрибуту с внешним ключом то же имя? [Дубликат]

Создать заказ

Order order = new Order(1, inputOuter, inputInner, inputSauce, 0);
ord.add(order) // Add the order to your list.

Стоимость заказа задается методом setOrder (int repOrderId, String repOuter, String repInner, String repSauce)

изменить этот метод к следующему.

public void setOrder() {

    double calcCost;
    double outerCost = 0;
    double innerCost = 0;
    double sauceCost = 0;

    // Outer Cost
    if (outer.equalsIgnoreCase("Bun")) {
        outerCost = 0.5;
    } else if (outer.equalsIgnoreCase("Bread")) {
        outerCost = 0.25;
    } else if (outer.equalsIgnoreCase("Brioche")) {
        outerCost = 0.75;
    } else {
        System.out.println("Invalid Bread Type");
    }

    // Inner cost
    if (inner.equalsIgnoreCase("Ham")) {
        innerCost = 0.5;
    } else if (inner.equalsIgnoreCase("Cheese")) {
        innerCost = 0.25;
    } else if (inner.equalsIgnoreCase("Cucumber")) {
        innerCost = 0.75;
    } else {
        System.out.println("Invalid Filling Type");
    }

    // Sauce Cost
    if (sauce.equalsIgnoreCase("Mayo")) {
        sauceCost = 0.5;
    } else if (sauce.equalsIgnoreCase("Butter")) {
        sauceCost = 0.25;
    } else if (sauce.equalsIgnoreCase("Marmite")) {
        sauceCost = 0.75;
    } else {
        System.out.println("Invalid Sauce Type");
    }

    calcCost = outerCost + innerCost + sauceCost;
    this.Cost = calcCost;
}

Теперь вы можете получить стоимость, вызвав getCost () в порядке следующим образом.

Чтобы рассчитать стоимость заказа, вызовите order.setOrder ( ); Чтобы получить стоимость заказа, вызовите order.getCost ();

ПРИМЕЧАНИЕ. Не используйте == для сравнения строки. Всегда используйте equals () или equalsIgnoreCase ().

0
задан azure boy 16 January 2019 в 10:57
поделиться

2 ответа

Атрибут [ForeignKey] переопределяет соглашение по умолчанию для внешнего ключа. Это позволяет нам указывать свойство внешнего ключа в зависимом объекте, имя которого не совпадает со свойством первичного ключа основного объекта.

В вашем случае это создаст столбец внешнего ключа с именем Users_ID в таблице Sims, предотвращая генерацию столбца ID в базе данных.

0
ответ дан DevDotNet 16 January 2019 в 10:57
поделиться

Потому что это говорит EF, что поле внешнего ключа , используемое для хранения идентификатора связанной записи «Users», называется «Users_ID».
Если вам явно не нужно, чтобы это поле было доступно в вашей Sims сущности, то вы можете просто полностью его исключить & amp; вам вообще не нужно иметь атрибут ForeignKey & amp; EF справится с этим за кулисами.

В качестве альтернативы, вы можете назвать поле внешнего ключа «UsersId», и оно будет предполагать, что это внешний ключ из-за соглашения.

Так что с любым из них должно быть все в порядке:

//no explicit foreign key
public class Sims
{
    public int ID { get; set; }
    public Users Users { get; set; }
}

//explicit foreign key but EF works it out via convention
public class Sims
{
    public int ID { get; set; }
    public int UsersId { get; set; }
    public Users Users { get; set; }
}

//explicitly named foreign key which is named differently from 
//convention so needs to be pointed at.  note nameof() operator
//which will give a compiler error should you rename it, so is
//better than a magic string
public class Sims
{
    public int ID { get; set; }

    [ForeignKey(nameof(Users))]
    public int MyUsersFkField { get; set; }        
    public Users Users { get; set; }
}

Вы также можете добавить атрибут к свойству Users и указать его в поле Id.

Важным примечанием является то, что если вы используете свойство FK с нетрадиционным названием и вообще не задают внешний ключ , то EF создаст поле FK UsersId в базовой базе данных используйте это (но это не будет выставлено в вашей модели)

0
ответ дан GPW 16 January 2019 в 10:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: