【发布时间】:2021-01-07 16:52:42
【问题描述】:
我有四个带属性的表(成员有球员,每个人都参加许多运动)最后一个表多对多关系的中间表
[Table("Members")]
public class MemberModel : BaseDatabaseItem
{
public string MemberShipCode { get; set; }
public string MemberShipYear { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<PlayerModel> MembershipNPlayers { get; set; }
}
[Table("Players")]
public class PlayerModel : BaseDatabaseItem
{
public string PlayerName { get; set; }
public double PlayerPayment { get; set; }
[ForeignKey(typeof(MemberModel))]
public int MemberModelId { get; set; }
[ManyToMany(typeof(PlayerSport))]
public List<Sport> Sports { get; set; }
}
[Table("Sports")]
public class Sport : BaseDatabaseItem
{
private SportCaegory sportCaegory;
public string SportName { get; set; }
[Ignore]
public SportCaegory SportCaegory
{
get
{
return sportCaegory = new SportCaegory
{
SportPrice = SportPrice,
SportType = SportType
};
}
set
{
sportCaegory = value;
if (sportCaegory == null)
return;
SportType = sportCaegory.SportType;
SportPrice = sportCaegory.SportPrice;
}
}
public string SportType { get; set; }
public double SportPrice { get; set; }
[ManyToMany(typeof(PlayerSport))]
public List<PlayerModel> Players { get; set; }
}
public class PlayerSport : BaseDatabaseItem
{
[ForeignKey(typeof(PlayerModel))]
public int PlayerModelId { get; set; }
[ForeignKey(typeof(Sport))]
public int SportId { get; set; }
}
BaseDataItem 只是一个有 ID 的类(Primary - AutoIn)
当我将会员保存在数据库中时,我会保存 Sports 然后 Players 最后是会员
foreach (var sport in Players.SelectMany(p => p.Sports))
{
await _sportsRepository.SaveItemAsync(new Sport
{
Id = sport.Id == 0 ? 0 : sport.Id,
SportName = sport.SportName,
SportCaegory = sport.SportCaegory
});
};
foreach (var player in Players)
{
await _playersRepository.SaveItemAsync(new PlayerModel
{
Id = player.Id == 0 ? 0 : player.Id,
PlayerName = player.PlayerName,
PlayerPayment = player.PlayerPayment,
Sports = player.Sports
});
await _playersRepository.SaveWithChildrenAsync(player);
};
var member = new MemberModel
{
Id = string.IsNullOrEmpty(Id) ? 0 : int.Parse(Id),
MemberShipCode = MemberShipCode,
MemberShipYear = MemberShipYear,
MembershipNPlayers = Players.ToList()
};
await _membersRepository.SaveWithChildrenAsync(member);
SaveWithChildrenAsync(仅检查 Id)=>
public async Task SaveWithChildrenAsync(T entity)
{
if (entity.Id != 0)
await UpdateWithChildren(entity);
else
await InsertWithChildren(entity);
}
当我检索数据时,每个球员的体育列表计数始终为零
var member = await _membersRepository.GetWithChildren(MemberId) ;
var MemberPlayers = member.MembershipNPlayers;
foreach (var player in MemberPlayers)
{
var p = await _playersRepository.GetWithChildren(player.Id);
Players.Add(p);
}
MemberShipCode = member.MemberShipCode;
MemberShipYear = member.MemberShipYear;
如何解决?
【问题讨论】:
标签: c# sqlite xamarin xamarin.forms many-to-many