2015-09-25 95 views
0

我有一个棘手的问题很多很多。我有两个类CharacterWeapon。这两个人有一张名为WeaponCharacter的桥牌桌,这是一个多对多的关系。几个角色可以有几个相同的武器和几个

enter image description here

在该时点,A Character可以拥有各自独一无二的weapon,但Character不能拥有两个相同的Weapons。下图描述了我想如何做。

enter image description here

上部是代码如何目前,和下面是我希望它是,或类似的溶液。

这是处理购买武器交易的方法。

[HttpGet] 
    public ActionResult BuyWeapon(int weaponId) 
    { 
     string currentUserId = User.Identity.GetUserId(); 

     var ctx = new DAL.ProjectStrawberryEntities(); 

     Character character = ctx.Characters.FirstOrDefault(c => c.AccountId == currentUserId); 
     Weapon weapon = ctx.Weapons.FirstOrDefault(w => w.Id == weaponId); 

     if (character.Gold - weapon.Price >= 0) 
     { 
      character.Weapons.Add(weapon); 
      character.Gold -= (int)weapon.Price; 
      ctx.SaveChanges(); 
     } 

     return RedirectToAction("Index", "Game"); 
    } 

我所做的:

我也曾经在WeaponCharacter添加量,但随后ICollectionsWeaponCharacter自己都搞砸了。

这可以在这里读到:ASP.net create many to many entity in C#

目标:

我想一个角色能够拥有相同的武器藏汉的多张复印件。

+0

正如Sean Lange所说,我希望角色能够拥有同一武器的多个副本。在这种情况下有多少错误?只需制作一个库存表就可以更容易一些,这个库需要武器ID。 – Kokefa

+1

如果你删除数量列并且只有一个带有WeaponCharacterId(Key),WeaponId和CharacterId的表格,并且只是插入相同的武器和角色ID,你可能会更好。这会让你灵活地为每个字符 – JamieD77

+0

@ JamieD77对相同的武器进行不同的优化,听起来容易得多。有时候,单独参与某个项目往往会让你的思维保持在框中。我会去解决这个问题。 – Kokefa

回答

1

由于JamieD77在评论中提到。

如果您删除数量列,只是有WeaponCharacterId(密钥),WeaponId和一个或CharacterId表,只是不停地插入相同的武器和人物的ID,你可能会从长远来看更好。这会让你灵活地对每个角色的同一武器进行不同的优化。