我目前正面临一个问题,即我正在努力使我们的Model First DevForce实体之一的WPF客户端部分。问题是WPF客户端中的部分似乎无法访问客户端项目引用的模型项目中的兄弟部分中的属性。
我在客户端和模型中都使用了相同的命名空间,但客户端不断回来,因为它只是一个文件的部分名称。
我的主要原因是我需要访问位于我添加到客户端实体Partial的属性中的客户端项目中的静态类的属性。其样本如下:
Model Buddy Class:
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Security.Principal;
using IbEm = IdeaBlade.EntityModel;
using IdeaBlade.EntityModel.Security;
using IdeaBlade.Validation;
// ReSharper disable CheckNamespace
namespace BearPaw.Models.Main
{
[MetadataType(typeof(NavigationButtonGroupMetadata))]
public partial class NavigationButtonGroup
{
[IbEm.AllowRpc]
public static object NameAlreadyInUse(IPrincipal principal,
IbEm.EntityManager entityManager, params Object[] args)
{
string buttonGroupNameToCheck = (string)args[0];
var serverButtonGroup = entityManager.GetQuery<NavigationButtonGroup>().FirstOrDefault((u) => u.Name == buttonGroupNameToCheck);
return serverButtonGroup != null;
}
}
public class NavigationButtonGroupMetadata
{
[RegexVerifier("Name", @"^[A-Za-z_]*$")]
[StringLengthVerifier(MaxValue = 100, IsRequired = true, ErrorMessage = "Button Group Name must be unique")]
public static string Name;
}
}
客户端部分:
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Security.Principal;
using IbEm = IdeaBlade.EntityModel;
using IdeaBlade.EntityModel.Security;
using IdeaBlade.Validation;
// ReSharper disable CheckNamespace
namespace BearPaw.Models.Main
{
[MetadataType(typeof(NavigationButtonGroupMetadata))]
public partial class NavigationButtonGroup
{
public bool IsEnabled
{
get
{
{
if (NavigationButtonGroupType.AlwaysVisible || (DynamicMenuItemsHelper.MenuDetails != null && DynamicMenuItemsHelper.MenuDetails.Count() > 0 )) return true;
var currentUser = Authenticator.Instance?.DefaultAuthenticationContext?.Principal?.Identity;
return currentUser != null && NavigationButtons.
Any(b => b.IsEnabled);
}
}
}
}
}
Visual Studio在NavigationButtonGroupType.AlwaysVisible上显示编译错误,指出非静态字段需要对象引用,即使NavigationButtonGroupType是模型中实体的nav prop。类似的问题也适用于NavigationButtons也是一个nav属性,但Visual Studio声明它在当前上下文中不存在。
任何帮助或指示为什么这不起作用将不胜感激。
非常感谢
利
答案 0 :(得分:0)
部分类定义允许您将类定义分布在多个文件上,但只能在同一个程序集中。这是一个C#,而不是DevForce限制。有关详细信息,请参阅here。
如果我理解正确,您希望实体类的某些功能仅在客户端上可用(以及服务器上的某些功能?)。如果要定义客户端和服务器模型项目,则可以使用条件编译来确定每个程序集中实体的哪些功能可用。这在DevForce SL应用程序中是相当标准的,尽管可能在WPF中使用较少。
如果你使用这种类型的架构,另一种选择是在ViewModel中放置这样的属性。