我试图使用我的datacontext.designer.cs文件中的扩展性方法定义来进行一些验证.
所以我创建了一个新文件并添加了这段代码:
public partial class LawEnforcementDataContext : System.Data.Linq.DataContext
{
partial void InsertCourse(Course instance) // this definition copied from generated file
{
ValidateCourse(instance);
this.ExecuteDynamicInsert(instance);
}
partial void UpdateCourse(Course instance) // this definition copied from generated file
{
ValidateCourse(instance);
this.ExecuteDynamicUpdate(instance);
}
private void ValidateCourse(Course instance)
{
if (instance.StartDate > instance.EndDate)
{
throw new ApplicationException("Start date cannot be later than end date.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我因为这些错误而无法编译:
Error 1 No defining declaration found for implementing declaration of partial method 'LawEnforcementDataContext.InsertCourse(reservation.lawenforcement.Course)'
Error 2 No defining …Run Code Online (Sandbox Code Playgroud) 好的,所以我们内部有一个实用工具,可以从我们的数据库表和视图中生成业务模型类,类似于(但不完全像)ORM.在维护它时,我发现模式中的数据可能不会发生很大的变化.但是,功能可能会.我们可能希望在未来添加其他功能.我们可能想要生成一些功能,我们可能想要扩展它.
我们正在构建的类将驻留在类库中,供其他库和应用程序使用.那里没什么大惊喜.但这里的难点是如何设计生成的类,以便在重新生成类时尽可能少地破坏代码.例如,如果代码已添加到属性(表示数据库表中的列),我们不希望丢失它.
因此,有两种方法可以想到:
经典继承,整个过程在一个"单片"类中完成,消费者可以自由地覆盖基础实现.然而,这有时会变得棘手,并经常引入铸造头痛.此外,如果派生类不小心并忘记调用基类功能,事情很快就会出错.
部分课程.在此方案中,我们将业务对象分成不同的部分:属性(映射到列)和行为.行为甚至可以进一步细分为生成的行为和自定义行为.正如您所看到的,这种方法的问题在于其固有的复杂性.此外,还有命名问题.
以下是我的问题:当你处理这样的场景时(如果有的话),或者如果你遇到这样的场景,你会考虑哪些解决方案,为什么?
在我的框架项目中,我有一个表示内容管理系统中的选项卡的类.在某些framewrok实现中,需要使用特定于该实现的选项卡的定义来扩展此类.我通过将CmsTabs类更改为部分来实现此目的,如下所示:
namespace Framework
{
/// <summary>
/// Class containing common CMS Tab names
/// </summary>
public static partial class CmsTab
{
/// <summary>
/// Information Tab
/// </summary>
public const string Information = "Information";
Run Code Online (Sandbox Code Playgroud)
然后在实现框架的程序集中创建一个具有相同名称和命名空间的类.
但是,当我构建框架程序集时,CmsTabs类似乎不再是部分的 - 当我向其添加部分类时,它的成员隐藏在实现程序集中.当在Reflector中反汇编时,我得到了这个:
public class CmsTab
{...
Run Code Online (Sandbox Code Playgroud)
我是否需要做些什么来保持其部分状态,假设可以做我想做的事情.
谢谢.
是否有在VS2012编辑器中为同一个类的部分类之间跳转的快捷方式?我知道我可以使用搜索,但我希望有一个捷径.
我有以下VB.NET类定义:
<Serializable()> Partial Public Class Customers
End Class
Run Code Online (Sandbox Code Playgroud)
在另一个文件中我有相同的东西(当然有不同的方法和变量).当我编译时,我收到以下错误:
属性'SerializableAttribute'不能多次应用.
这个错误非常自我解释.我的问题是,如果我只将一个类标记为Serializable(),我可以假设整个类被标记为serializable()吗?换句话说,我只需要在类中的1个位置使用serializable()标记吗?
什么时候将你的班级分成两个.cs并将其作为一个部分类?
是否有迹象显示是时候进行部分课程了?
谢谢!
我为网页创建了两个部分类.
现在我已经给出了一个函数的定义,说我在调用OnSubmit事件按钮时调用submit().
但是这个函数没有被调用,程序没有编译,因为它无法搜索函数的定义,函数的定义是在另一个分类中定义的.是否可以调用此函数,或者我必须在im调用它的同一文件中给出函数的定义
例如
<%@ Page Language="C#" MasterPageFile="~/Master Pages/LeftMenu.master" AutoEventWireup="true" CodeFile="Registration.aspx.cs" Inherits="Web_Pages_Authentication_Login_Management_Registration" Title="Registration" StylesheetTheme="Default Theme 1" %>
Run Code Online (Sandbox Code Playgroud)
Registration.aspx.cs
public partial class Web_Pages_Authentication_Login_Management_Registration : System.Web.UI.Page
{
private string firstName;
private string lastName;
private string userName;
private string userPassword;
private string primaryEmail;
protected void btnSubmit_Click(object sender, EventArgs e)
{
Display();
}
}
Run Code Online (Sandbox Code Playgroud)
Registration_Database.cs
public partial class Web_Pages_Authentication_Login_Management_Registration
{
const string dbFirstName = "@FirstName";
const string dbLastName = "@LastName";
const string dbUserName= "@UserName";
const string dbUserPassword = "@UserPassword";
const string dbPrimaryEmail = "@PrimaryEmail"; …Run Code Online (Sandbox Code Playgroud) 我需要扩展我的EF部分类,因为我想添加一些功能来使用Oracle的序列,但是我真的不知道如何使用这个部分类的东西,我制作了一个单独的.cs文件并将其命名为一个我的自动生成的类如下:
namespace GlassStoreDAL
{
public partial class CAR
{
private int _sequences;
public int sequences
{
get { return _sequences; }
set { _sequences = value; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我认为,在我的BLL上 - 它引用了GlassStoreDAL - 我可以找到我的"序列"属性,但显然出现了问题,我将不胜感激.
这是我生成的部分类,我是否还有序列属性?
[EdmEntityTypeAttribute(NamespaceName="Model", Name="CAR")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class CAR : EntityObject
{
#region Factory Method
/// <summary>
/// Create a new CAR object.
/// </summary>
/// <param name="id">Initial value of the ID property.</param>
public static CAR CreateCAR(global::System.Decimal id)
{
CAR cAR = new CAR();
cAR.ID …Run Code Online (Sandbox Code Playgroud) 这是我的服务生成类:
public partial class MyClass : object,
System.Runtime.Serialization.IExtensibleDataObject,
System.ComponentModel.INotifyPropertyChanged
{ }
Run Code Online (Sandbox Code Playgroud)
我正在使用自己的服务.在MyClass我已经被覆盖ToString()但我没有在我的客户端.我要么要生成它,要么MyClass部分我能够覆盖ToString自己?
我知道我可以用生成的.cs文件写.什么是最好的方法,我应该做什么?
有没有办法找出类是否partial在 Roslyn 分析器内?有一个PartialImplementationPartin IMethodSymbol,但没有类似的 for INamedTypeSymbol。
我正在编写一个源生成器,并且仅在可能的情况下才生成该类的第二部分(如果第一部分是部分的)。
c# partial-classes roslyn-code-analysis csharp-source-generator
partial-classes ×10
c# ×9
.net ×5
asp.net ×2
linq ×1
linq-to-sql ×1
oop ×1
oracle ×1
vb.net ×1
wcf ×1