小编CkH*_*CkH的帖子

扩展枚举,矫枉过正?

我有一个需要序列化为EDI格式的对象.对于这个例子,我们会说它是一辆汽车.汽车可能不是b/c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变.

我有许多枚举,如下所示,应用了自定义属性.

public enum RoofStyle
{
    [DisplayText("Glass Top")]
    [StringValue("GTR")]
    Glass,
    [DisplayText("Convertible Soft Top")]
    [StringValue("CST")]
    ConvertibleSoft,
    [DisplayText("Hard Top")]
    [StringValue("HT ")]
    HardTop,
    [DisplayText("Targa Top")]
    [StringValue("TT ")]
    Targa,
}
Run Code Online (Sandbox Code Playgroud)

通过扩展方法访问属性:

public static string GetStringValue(this Enum value)
{
    // Get the type
    Type type = value.GetType();

    // Get fieldinfo for this type
    FieldInfo fieldInfo = type.GetField(value.ToString());

    // Get the stringvalue attributes
    StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
        typeof(StringValueAttribute), false) as StringValueAttribute[];

    // Return the first if there was a match.
    return attribs.Length > 0 ? attribs[0].StringValue …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods enums attributes

4
推荐指数
1
解决办法
2792
查看次数

ObjectSet <T> .AddObject()与EntityCollection <T> .Add()

假设我有两个EntitySets,"团队"和"玩家".

我正在为系统添加新的团队,为了争论,让我说我从一个文件中添加了一千个团队(包含重复项).

该系统包含100个团队.我的目标是避免重复,而不为每个添加的团队调用SaveChanges().

该过程是查询newteam尚不存在,然后添加新团队(如果不存在).

    var team = (from t in context.Teams
    where t.Name == newTeam.Name
    select t).FirstOrDefault();

if (team==null)
--Add New Team
Run Code Online (Sandbox Code Playgroud)

如果我添加使用context.Teams.AddObject(newTeam);context.AddObject("Teams",newTeam);

team.Count()将保持为100,如果再次运行查询,var团队将为null.

但是,如果我player.Teams.Add(newTeam);用来添加团队,一切都很完美,除了我必须有一个玩家添加NewTeam并且该玩家将成为所有新团队的成员.

调用后player.Teams.Add(newTeam); 查询将返回新团队.

 var team = (from t in player.teams
where t.Name = newTeam.Name
select t).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

player.Teams.Count() 会增加一个.

在第一个示例context.Teams是一个,ObjectSet<T>,而在,player.Teams.Add Teams是一个EntityCollection<T>.我认为这些行为会相同,但事实并非如此.

有没有办法使ObjectSet<T>表现像EntityCollection<T>?我想在从文件中添加所有团队之后只调用一次SaveChanges.

还是有更好的方式,我没有看到?

谢谢!

.net c# linq entity-framework-4

4
推荐指数
1
解决办法
4881
查看次数