Witam,
Dostaję błąd:Unable to determine the principal end of the 'Funeral_Home.Models.Kind_Category' relationship. Multiple added entities may have the same primary key.
Kierowałem się tym przestarzałym poradnikiem - http://www.asp.net/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-4
Niestety w tym kontrolerze przy linijce: var categories = storeDB.Categories.ToList(); wysypuje się błąd i nie wiem jak go naprawić.
namespace Funeral_Home.Controllers
{
public class StoreController : Controller
{
FuneralHomeEntities storeDB = new FuneralHomeEntities();
// GET: Store
public ActionResult Index()
{
var categories = storeDB.Categories.ToList();
return View(categories);
Tutaj jest mój model bazodanowy:
- Category.cs
namespace Funeral_Home.Models
{
public class Category
{
//[Key]
public int CategoryId { get; set; }
public string Name { get; set; }
public int Description { get; set; }
public List<Kind> Kinds { get; set; }
}
}
- FuneralHomeEntities.cs
namespace Funeral_Home.Models
{
public class FuneralHomeEntities : DbContext
{
public DbSet<Kind> Kinds { get; set; }
public DbSet<Category> Categories { get; set; }
}
}
- Kind.cs
namespace Funeral_Home.Models
{
public class Kind
{
// [Key]
public int KindId { get; set; }
//[ForeignKey("CategoryId")]
public int CategoryId { get; set; }
// [ForeignKey("ProducerId")]
public int ProducerId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string KindArtUrl { get; set; }
public Category Category { get; set; }
public Producer Producer { get; set; }
}
}
- Producer.cs
namespace Funeral_Home.Models
{
public class Producer
{
//[Key]
public int ProducerId { get; set; }
public string Name { get; set; }
}
}
No i metoda Seed:
namespace Funeral_Home.Models
{
public class SampleData : CreateDatabaseIfNotExists<FuneralHomeEntities>
{
protected override void Seed(FuneralHomeEntities context)
{
var categories = new List<Category>
{
new Category {Name = "Trumny" },
new Category {Name = "Znicze" },
new Category {Name = "Wieńce"},
new Category {Name = "Kwiaty doniczkowe" },
new Category {Name = "Bukiety" },
new Category {Name = "Akcesoria do sprzątania"},
new Category {Name = "Ubrania/kosmetyki pogrzebowe" },
new Category {Name = "Inne" }
};
var producers = new List<Producer>
{
new Producer { Name = "Zniczek z.o.o" },
new Producer { Name = "Trumstol" },
new Producer { Name = "Kamix" },
new Producer { Name = "ERGON" }
};
new List<Kind>
{
new Kind { Title = "Dębowe", Category = categories.SingleOrDefault(g => g.Name == "Trumny"), Price = 2500M, Producer = producers.SingleOrDefault(a => a.Name == "Trumstol"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Lipowe", Category = categories.SingleOrDefault(g => g.Name == "Trumny"), Price = 1800M, Producer = producers.SingleOrDefault(a => a.Name == "Trumstol"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Swierkowe", Category = categories.SingleOrDefault(g => g.Name == "Trumny"), Price = 2000M, Producer = producers.SingleOrDefault(a => a.Name == "Trumstol"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Brzozowe", Category = categories.SingleOrDefault(g => g.Name == "Trumny"), Price = 2300M, Producer = producers.SingleOrDefault(a => a.Name == "Trumstol"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Male", Category = categories.SingleOrDefault(g => g.Name == "Znicze"), Price = 5M, Producer = producers.SingleOrDefault(a => a.Name == "Zniczek z.o.o"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Srednie", Category = categories.SingleOrDefault(g => g.Name == "Znicze"), Price = 10M, Producer = producers.SingleOrDefault(a => a.Name == "Zniczek z.o.o"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Duze", Category = categories.SingleOrDefault(g => g.Name == "Znicze"), Price = 15M, Producer = producers.SingleOrDefault(a => a.Name == "Zniczek z.o.o"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Proste", Category = categories.SingleOrDefault(g => g.Name == "Wieñce"), Price = 25M, Producer = producers.SingleOrDefault(a => a.Name == "Kamix"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Ozdobne", Category = categories.SingleOrDefault(g => g.Name == "Wieñce"), Price = 45M, Producer = producers.SingleOrDefault(a => a.Name == "Kamix"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Bratki", Category = categories.SingleOrDefault(g => g.Name == "Kwiaty doniczkowe"), Price = 17M, Producer = producers.SingleOrDefault(a => a.Name == "Kamix"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Róze", Category = categories.SingleOrDefault(g => g.Name == "Bukiety"), Price = 10M, Producer = producers.SingleOrDefault(a => a.Name == "Kamix"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Zmiotka i szufelka", Category = categories.SingleOrDefault(g => g.Name == "Akcesoria do sprzątania"), Price = 5M, Producer = producers.SingleOrDefault(a => a.Name == "ERGON"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Garnitur", Category = categories.SingleOrDefault(g => g.Name == "Ubrania/kosmetyki pogrzebowe"), Price = 45M, Producer = producers.SingleOrDefault(a => a.Name == "Trumstol"), KindArtUrl = "/Content/Images/placeholder.gif" },
new Kind { Title = "Zapalki", Category = categories.SingleOrDefault(g => g.Name == "Inne"), Price = 2M, Producer = producers.SingleOrDefault(a => a.Name == "ERGON"), KindArtUrl = "/Content/Images/placeholder.gif" },
}.ForEach(a => context.Kinds.Add(a));
}
}
}
Jak mam zmienić bazę żeby klucze obce,główne się nie kłóciły i żebym nie musiał zmieniać ich na interface'y Icolletion itd.? Powiem szczerze naczytałem się już tyle o tym błędzie że mam mętlik w głowie i nie wiem jak mam to naprawić.
DORZUCAM CAŁY PROJEKT BEZ FOLDERU PACKAGES - MOŻE TAK KOMUŚ BĘDZIE ŁATWIEJ MI POMÓC.