我的EF'DataBase'的最佳方法

时间:2011-10-05 14:48:36

标签: entity-framework-4.1

我已经在网络项目上工作了几周,而且主要是考虑如何实现数据层。我选择了Entity Framework 4.1,代码第一个模型。

所以,在很多其他实体中,想想有N CHARACTER的PLAYER,可以在0..1 GUILD

public class Player
{
    public int Id { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }
    public bool IsLogged { get; set; }
    public DateTime LastActivity { get; set; }
    public DateTime LastLogin { get; set; }
    public DateTime LastLogout { get; set; }
    public string DisplayName { get; set; }
    public string DefaultImage { get; set; }

    public virtual Board Board { get; set; }
    public virtual PlayerData PlayerData { get; set; }
    public virtual ICollection<Character> Characters { get; set; }
}
public class Guild
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string DefaultImage { get; set; }

    public virtual ICollection<Character> Characters { get; set; }
}
public class Character
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual Player Player { get; set; }
    public virtual Guild Guild { get; set; }
    public virtual GuildRank GuildRank { get; set; }
    public virtual Game Game { get; set; }
}

正如你所看到的,还有更多的实体和关系,但这会有效。

嗯,它没有,这段代码:

Character character = mod.Characters.Where(c => c.Player == player).FirstOrDefault();

引发异常:

  

无法创建“DataObjects.Player”类型的常量值。只要   支持原始类型(例如Int32,String和Guid')   这个背景。

我不明白为什么。

我也试过使用[Key]和[ForeingKey]属性,但我找不到它们! :S(虽然在System.Data.Entity.dll中的位置,但不是)。

所以在经历了这么多错误后,我开始想到也许我弄错了......

有关如何修复错误或转向其他方向的任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是EF的愚蠢。您无法直接比较Player。您必须比较ID,以便可以将您的查询重写为:

int playerId = player.Id;
Character character = mod.Characters.FirstOrDefault(c => c.Player.Id == playerId);