【问题标题】:Override Attribute in Partial Class (DBML)部分类中的覆盖属性 (DBML)
【发布时间】:2010-06-18 01:51:38
【问题描述】:

是否可以覆盖部分类上的属性集?

所以我有一个这样的自动生成的部分类:

[Table(Name="dbo.Users")]
public partial class MbsUser : INotifyPropertyChanging, INotifyPropertyChanged
{

这是在我的 DBML 中生成的。问题是,我不希望我的班级使用这张桌子。我创建了一个名为“dbo.ActiveUsers”的视图,并希望使用它来代替(以阻止停用的用户)。

我尝试创建另一个具有相同属性的部分类,如下所示:

[Table(Name = "dbo.MbsUsersActive")]
public partial class MbsUser : IEquatable<MbsUser>
{

但我得到了错误:

Duplicate 'Table' attribute

【问题讨论】:

    标签: c# linq linq-to-sql attributes partial-classes


    【解决方案1】:

    您会收到该错误,因为属性可以控制 [AttributeUsage] 声明中该属性的一个或多个实例,并且它只声明一个。不,不幸的是,这行不通……

    为什么不更改设计器中的映射以指向新实体?不知道这是否会起作用,但值得一试。

    【讨论】:

    • 是的,这就是我现在所做的。 (顺便说一句,非常感谢您的快速回复)。如果我在设计器中更改它,它会起作用,但如果再次生成 DBML,我将丢失该更改,并获取所有用户,而不仅仅是活动用户。有什么想法可以让它持续存在吗?再次感谢!
    • 您的意思是它没有保存您的更改,或者您是说如果您需要删除模型并重新创建它如何处理?前者我没有遇到过问题,后者始终是一个问题;尽量不要删除整个模型,而只更新您需要的表(可以使用属性窗口下拉菜单轻松找到表)。如果您需要修改该表,请手动进行更改(添加列,添加映射详细信息)。
    • 后者。如果将来另一个开发人员重新创建了 DBML,则视图将不会被使用,并且停用的用户会突然变得活跃。再次感谢!感谢您的帮助!
    • P.S.我已将此标记为已回答,因为您已经回答了我最初的问题(谢谢),但如果您对此有任何想法,我会非常高兴!我可能会提出另一个更具体的问题。
    • 谢谢。我唯一能说的是,对于很多事情,甚至是开发来说,这是一个基本问题,就是如何将一些偏差通知其他人,无论是代码、DB,还是在这里也使用 DBML。我认为实体中有一个描述字段,您可以放置​​维护说明(要求他们首先检查)...确保其有据可查,并且有一个人们在更新模型时遵循的程序文档...我不知道你可以通过代码或属性来做到这一点......
    猜你喜欢
    • 2012-08-02
    • 2011-04-22
    • 2018-09-05
    • 2018-02-06
    • 2018-12-10
    • 2016-07-20
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多