- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
正如主题中的简短描述:如何将所有 DataAnnotations 从模型移动到元数据模型,以便在更新 edmx 时不将其清除?
换句话说,我希望数据注释是安全的,而不是随着 edmx 的每次更新而被删除,我会在 dataannotation 中有一个选项来检查是否满足所有数据注释要求(IsValid 方法)以在 RelayCommand 的 CanExecute 方法中使用它.
我有一个类如下:
public partial class Customer : IDataErrorInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public int ID{ get; set; }
[Required(ErrorMessage = "Field required")]
public string Name{ get; set; }
[Required(ErrorMessage = "Field required")]
public string LastName{ get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblKontrahent> tblKontrahent { get; set; }
#region Validation
public bool IsValid { get; set; }
public string Error { get { return null; } }
public string this[string columnName]
{
get
{
Validation();
return InputValidation<Customer >.Validate(this, columnName);
}
}
public ICollection<string> AllErrors()
{
return InputValidation<Customer >.Validate(this);
}
private void Validation()
{
ICollection<string> allErrors = AllErrors();
if (allErrors.Count == 0)
IsValid = true;
else
IsValid = false;
}
#endregion
#region Shallow copy
public Customer ShallowCopy()
{
return (Customer )this.MemberwiseClone();
}
#endregion
}
如何使用注释和 IsValid 函数将其从模型移动到元数据模型。如果 ShallowCopy 方法也可以移动,那就太好了。
非常感谢您的任何建议!
最佳答案
对于大多数重要的应用程序,我将 EF 类完全分开。我将 Entity Framework 中的属性复制到 self 跟踪的 View 模型。
对于较小的应用程序,我过去常常避免这样做。
您可以看到其中使用的一种方法:
https://gallery.technet.microsoft.com/scriptcenter/WPF-Entity-Framework-MVVM-78cdc204
它使用 INotifyDataErrorInfo,您会在 BaseEntity 中找到 IsValid。这是一个相当复杂但可重用的类。
您或许可以将 shallowcopy 重构为 BaseEntity。如果您可以在任何地方使用它,那么很容易。
注释在单独的伙伴类中。您可以在 Customer.metadata.cs 和 Product.metadata.cs 中查看示例。这些是部分类,它们将对 BaseEntity 的继承添加到实体类。因此,EF 类 Customer 继承了 BaseEntity。
一个例子:
using DataAnnotationsExtensions;
namespace wpf_EntityFramework.EntityData
{
[MetadataTypeAttribute(typeof(Product.ProductMetadata))]
public partial class Product : BaseEntity, IEntityWithId
{
public void MetaSetUp()
{
// In wpf you need to explicitly state the metadata file.
// Maybe this will be improved in future versions of EF.
TypeDescriptor.AddProviderTransparent(
new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Product),
typeof(ProductMetadata)),
typeof(Product));
}
internal sealed class ProductMetadata
{
// Some of these datannotations rely on dataAnnotationsExtensions ( Nuget package )
[Required(ErrorMessage="Product Short Name is required")]
public string ProductShortName { get; set; }
[Required(ErrorMessage = "Product Weight is required")]
[Min(0.01, ErrorMessage = "Minimum weight is 0.01")]
[Max(70.00, ErrorMessage = "We don't sell anything weighing more than 70Kg")]
public Nullable<decimal> Weight { get; set; }
[Required(ErrorMessage = "Bar Code is required")]
[RegularExpression(@"[0-9]{11}$", ErrorMessage="Bar codes must be 11 digits")]
public string BarCode { get; set; }
[Required(ErrorMessage = "Price per product is required")]
[Range(0,200, ErrorMessage="Price must be 0 - £200") ]
public Nullable<decimal> PricePer { get; set; }
private ProductMetadata()
{ }
}
}
正如评论中所说。
您需要在每个实例上调用该 Metasetup。除非最近几年发生了一些变化。伙伴类不只是像 MVC 那样被选中。
示例还从 UI 反馈转换失败。
请参阅 Dictionary1 中的模板。
<ControlTemplate x:Key="EditPopUp" TargetType="ContentControl">
<ControlTemplate.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ErrorToolTip}">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ControlTemplate.Resources>
<Grid Visibility="{Binding IsInEditMode, Converter={StaticResource BooleanToVisibilityConverter}}"
Width="{Binding ElementName=dg, Path=ActualWidth}"
Height="{Binding ElementName=dg, Path=ActualHeight}"
>
<i:Interaction.Triggers>
<local:RoutedEventTrigger RoutedEvent="{x:Static Validation.ErrorEvent}">
<e2c:EventToCommand
Command="{Binding EditVM.TheEntity.ConversionErrorCommand, Mode=OneWay}"
EventArgsConverter="{StaticResource BindingErrorEventArgsConverter}"
PassEventArgsToCommand="True" />
</local:RoutedEventTrigger>
<local:RoutedEventTrigger RoutedEvent="{x:Static Binding.SourceUpdatedEvent}">
<e2c:EventToCommand
Command="{Binding EditVM.TheEntity.SourceUpdatedCommand, Mode=OneWay}"
EventArgsConverter="{StaticResource BindingSourcePropertyConverter}"
PassEventArgsToCommand="True" />
</local:RoutedEventTrigger>
</i:Interaction.Triggers>
关于c# - 使用数据库优先方法的 WPF 中的 DataAnnotation - 如何将数据注释移动到好友类,包括。 IsValid 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56124879/
namespace GameForge { namespace Core { class CTribool; } } GameForge::Core::CTri
有没有什么方法可以限制 PHP 中的可见性,就像“包”可见性在 Java 中起作用或至少“ friend ”可见性在 C++ 中起作用一样?维护大型 OOP 项目并且不让任何人使用代码的任何部分的最佳
我实际上是在尝试让一个模板类与另一个模板类成为 friend 。类似的东西: #include template class Test1 { private: static int
我创建了一个应用程序,我试图通过 facebook 邀请 friend js 方法邀请 friend ,但一切正常,但没有向该 friend 发送通知。 我的申请链接:http://www.huzoo
我正在建立一个网站。我希望用户邀请 Facebook 好友查看用户可以在我的网站上创建的页面。所以我正在努力完成它。但我认为 FB Api 没有设置来做我想做的事情。我认为这是为了防止垃圾邮件,但我真
当用户通过 Facebook 注册我的网站时。它使用 Facebook 身份验证 API 在“注册”按钮旁边返回“3 位 friend 已注册”。 def facebook_authenticated
几周前我开始使用 Android 编程。而且我有一些 Java 技能。 所以我正在创建一个应用程序,它需要获取 Facebook 好友列表(只是名字而不是图片)。我用谷歌搜索,大多数人都说“阅读 Fa
我正在寻找一种连接到 Facebook 的方法,允许用户输入他们的用户名和密码,然后让我们的应用程序连接到他们的帐户并获取他们的联系人,以便他们可以邀请他们加入我们网站上的群组。我以前写过一个 Fac
我需要的功能是在自定义设计的网站页面上向用户显示 Facebook 好友列表,用户可以在其中选择其中一些并发送邀请。 在 API v2.0 中,可以通过这种方式获取好友列表: FB.api('/me/
我正在创建一个应用程序,并希望使用该应用程序的人可以在 Facebook 上找到使用相同应用程序的 friend 。在这方面的任何帮助都会很棒。 我知道这是可以做到的。我在 Instagram 和 T
我正在尝试访问用户 friend ,但我似乎无法弄清楚我将如何去做。没有明确的方法来访问 friend 列表,所以我认为它可能是一个属性,但这似乎不起作用。我正在尝试浏览文档并找到了一些有用的信息 h
我已经成功获取了好友列表: //token NSString *acessToken = [NSString stringWithFormat:@"%@",_facebookAccount.crede
我正在尝试获取用户的 facebook 好友列表,但它只返回好友的数量。下面是我的代码。这段代码有什么问题吗? -(void)loginViewFetchedUserInfo:(FBLoginView
我在我的应用程序中集成了 Facebook SDK。 我想获取安装了我的应用程序的 Facebook 好友列表。该列表应包含他们的详细信息,例如 Facebook 电子邮件 ID、Facebook 名
当有人访问我的网页时,我想让他将访问过的网页分享到他的Facebook好友墙上,以便其他人也可以点击共享链接进入访问过的网页。条件:访问的网页应该出现在选定 friend 的 Facebook 墙上,
我的类(class) Bloque 是我其他类(class) user 的 friend ,我想传递我的 user 类到我的 Bloque 类上名为 void colision() 的函数。 所以我尝
我尝试使用 this link这个。在本教程中,我只发布我的应用程序链接到我的墙上。但我想与所有 friend 分享我的应用程序链接。就像 XYZ 邀请您尝试 ABCapp 一样,只在通知栏中。当点击
我正在使用 Facebook Android SDK。有没有一种简单的方法可以让用户的 friend 下载该应用程序?例如,应用程序 Draw Something 实现了这一点。我似乎找不到关于这个主
我有一个 Flutter 应用程序,您可以在其中使用 Facebook 登录。 ( https://pub.dev/packages/flutter_facebook_login )。 当用户登录时,
我想显示我的 VK 好友列表。 private ArrayList Friends = new ArrayList(); Friends = api.getFriends(account.user_
我是一名优秀的程序员,十分优秀!