mam problem z dodawaniem obiektu takiej klasy do bazy danych:
public class EatenMeal
{
public int Id { get; set; }
public double Serving { get; set; }
public string Username { get; set; }
public DateTime Date { get; set; }
public virtual Meal Meal { get; set; }
public virtual MealType MealType { get; set; }
}
Jeszcze kawałek kontrolera
var meal = mealRepository.GetMeal(model.MealId);
EatenMeal eatenMeal = new EatenMeal()
{
Meal = meal,
Serving = model.Serving,
Username = User.Identity.Name,
MealType = mealTypeRepository.GetMealType(model.MealTypeID),
Date = model.Date
};
eatenMealRepository.AddEatenMeal(eatenMeal);
Mianowicie problem jest taki, że w bazie danych pojawia się nowy rekord, ale pola Meal_MealId oraz MealType_Id mają wartości całkiem inne niż, te który powinny być. eatenMeal.Meal.MealId oraz eatenMeal.MealType.Id w trybie debugowania do samego końca mają wartości, które zostały nadane w kontrolerze, natomiast w bazie danych wspomniane wyżej pola przyjmują wartości, które odpowiadają numerowi ID w ich tabelach. Czyli jak w bazie Meals mam 1000 rekordów i w MealTypes 5, to w tabeli EatenMeals pola Meal_MealId oraz MealType_Id dostają kolejno wartości 1001 i 4. Dlaczego tak się dzieje? Meal_MealId powinno być równe id obiektu meal pobranego z repozytorium, a następnie przypisanego do właściwości Meal w obiekcie eatenMeal, podobnie z MealType...
Na koniec jeszcze mogę podać definicje tabeli, ale w niej wszystko powinno być ok
CREATE TABLE [dbo].[EatenMeals] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Serving] FLOAT (53) NOT NULL,
[Username] NVARCHAR (MAX) NULL,
[Date] DATETIME NOT NULL,
[Meal_MealId] INT NULL,
[MealType_Id] INT NULL,
CONSTRAINT [PK_dbo.EatenMeals] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_dbo.EatenMeals_dbo.Meals_Meal_MealId] FOREIGN KEY ([Meal_MealId]) REFERENCES [dbo].[Meals] ([MealId]),
CONSTRAINT [FK_dbo.EatenMeals_dbo.MealTypes_MealType_Id] FOREIGN KEY ([MealType_Id]) REFERENCES [dbo].[MealTypes] ([Id])
);
GO
CREATE NONCLUSTERED INDEX [IX_Meal_MealId]
ON [dbo].[EatenMeals]([Meal_MealId] ASC);
GO
CREATE NONCLUSTERED INDEX [IX_MealType_Id]
ON [dbo].[EatenMeals]([MealType_Id] ASC);
W załączniku zrzut ekranu z momentu dodawania danych do bazy. Widać z MealId = 1, a w rekordzie w kolumnie Meal_MealId pojawiło się 1001, gdyż wcześniej miałem w tabeli Meals 1000 rekordów.