我有一个需要序列化为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) 假设我有两个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.
还是有更好的方式,我没有看到?
谢谢!