我正在尝试扩展VS设计器生成的linqtosql类,并需要确定特定字段的值是否已更改.有没有办法让我在表格/实体的DataContext Update方法中访问字段的前后值?
这是我的代码:
public partial class DataClassesDataContext
{
partial void UpdateActivity(Activity instance)
{
this.ExecuteDynamicUpdate(instance);
//need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has
}
}
Run Code Online (Sandbox Code Playgroud)
我也愿意在Activity实体类中添加一个属性来表示值是否已更改,但我无法弄清楚如何判断值是否已更改.我不能只使用Activity类的OnAssignedToChanged方法,因为只要设置了属性值就会触发,不一定会更改.我正在使用ListView和LINQDataSource控件进行更新,因此无论如何都会设置它.
我还以为我可以使用OnAssignedToChanging方法,但是Activity实例似乎没有当前值.以下代码不起作用.AssignedTo始终为null.
partial void OnAssignedToChanging(int? value)
{
if (value != this.AssignedTo)
{
_reassigned = true;
}
}
Run Code Online (Sandbox Code Playgroud) 评论更新:
我需要通过自己的参数扩展linq-to-sql类,并且不想触及任何生成的类.欢迎任何更好的建议.但是如果linq-to-sql类正在改变,我也不想再次进行所有属性赋值.因此,如果vstudio为类生成新属性,我将自己的扩展属性保持独立,并且新的内部来自类本身
原始问题:
我不确定是否可能.我有一辆级轿车和一辆mycar从班级车延伸出来.mycar类也有一个字符串列表.唯一的区别.
如何将现在的任何汽车对象投射到mycar对象,而无需手动分配所有属性.喜欢:
Car car = new Car();
MyCar mcar = (MyCar) car;
Run Code Online (Sandbox Code Playgroud)
要么
MyCar mcar = new MyCar(car);
Run Code Online (Sandbox Code Playgroud)
或者我可以用自己的变量扩展汽车,而不必总是这样做
Car car = new Car();
MyCar mcar = new MyCar();
mcar.name = car.name;
mcar.xyz = car.xyz;
...
Run Code Online (Sandbox Code Playgroud)
谢谢.
使用部分类编写NUnit测试的优缺点是什么?
我要开始了:
亲:私有方法可以测试
con:TDD不再可能了
还有什么?
我无法理解界面.在这里搜索了类似的问题后,我想出了以下界面,用于定义所有类所需的CRUD操作:
public interface IData<T>
{
IData<T> Select(int id);
List<T> SelectMultiple();
void Insert();
void Update();
void Delete();
}
Run Code Online (Sandbox Code Playgroud)
然后在我的部分类中实现:
public partial class Post : IData<Post>
{
public IData<Post> Select(int id)
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.Single(p => p.PostID == id);
}
public List<Post> SelectMultiple()
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.ToList();
}
// Update() and Delete() declarations
}
Run Code Online (Sandbox Code Playgroud)
这个都编译得很好,但是如果我尝试使用Post Select()方法:
Post p = new Post().Select(1);
Run Code Online (Sandbox Code Playgroud)
失败,无法将类型'IData'隐式转换为'Post'.存在显式转换(您是否错过了演员?)
这是有道理的,但我如何拥有它以便它不需要演员?我希望Select返回一个帖子(但不要将Post定义为接口级别的返回类型).我是否误解了界面,或者我可以做出快速修改?
在实体Framework 4.1数据库中,首先在生成的c#类中有一个构造函数,那么我在哪里可以进行部分类自定义初始化?
几年前,我被告知要在单独的.cs文件中实现业务逻辑代码,尽管这些文件包含了相同的分部类.所以可以从业务层调用一个方法,如下所示:
using(FooPartialDisposableClass partialClassInstance = new FooPartialDisposableClass ())
partialClassInstance.BusinessMethod();
Run Code Online (Sandbox Code Playgroud)
好.所以现在,我正在做同样的事情,这次我正在使用Facade模式.这个解决方案似乎是一种更好的方法,即使你必须编写更多的代码并且它的可维护性更低.
那么,我的问题是......按照部分类方法是否正确?
PS:我还想到了接口和依赖注入,以便将这一层与将要使用这些业务逻辑方法的层分离,但是考虑到这里的工作方式,这是一个禁忌:S
所以我想要做的是扩展程序中现有的vector类,让我这样说,
vector<string>* vec = new vector<string>(){"Value1","Value2"};
Run Code Online (Sandbox Code Playgroud)
要么
vector<string>* vec = new vector<string>({"Value1","Value2"});
Run Code Online (Sandbox Code Playgroud)
要么
vector<string> vec = {"Value1","Value2"};
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到这样的事情,但这样做,
string temp[] = {"Value1","Value2"};
vector<string> vec(temp, temp+ sizeof(temp) / sizeof( temp[0] ) );
Run Code Online (Sandbox Code Playgroud)
这使用向量迭代器构造函数但不能删除额外的行吗?
我知道在C#中你可以使用这样的partial关键词添加你想要的任何东西,
public partial class ClassName
{
ClassName(Stuff stuff)
{
}
void AmazingNewMethod()
{
}
}
Run Code Online (Sandbox Code Playgroud)
C++在某个地方有一个漂亮的技巧吗?
我是否必须继承vector并构建一个customVector具有构造函数的构造函数,它在后面执行迭代器构造函数的事情?
也许将这些行包装在一个静态Helper函数调用中,该调用通过Reference设置它并将其添加到某个工具箱类中?
我觉得很多程序员都遇到过这个问题.那里有优雅的解决方案吗?
谢谢.
编辑:修复标题,提到这是一个初始化列表构造函数.
我喜欢使用私有嵌套类,除了它们总是感觉如此混乱.通常我把它们放在自己的中#region,但是我希望它们在位置方面与它们的父类分开,而且我也不希望它们在单独的文件中.我决定做的是让他们的父类成为局部,然后将子类放在文件中父类的下面.
不幸的是,似乎每个文件都不能有多个部分类定义.
(编辑:事实证明,每个文件可以有多个部分部分;它只是表单设计者不喜欢它.)
我真正想做的是(所有在一个文件中):
internal class Parent
{
}
private class Parent.Child1
{
}
private class Parent.Child2
{
}
Run Code Online (Sandbox Code Playgroud)
但似乎我所能做的就是为每个新的子类生成一个新的源文件,或者像这样安排它们:
internal class Parent
{
private class Child1
{
}
private class Child2
{
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法完成我在这里要做的事情?
C#具有部分类的概念.我见过的一个例子就是WSDLs.Visual Studio可以联系服务器以查找服务,并根据它自动生成部分类.然后,Visual Studios将为您提供一个空白的部分类来匹配它,以便您可以添加自己的代码.
我觉得这种做法相当令人困惑.部分类优于继承是否有任何优势?
我有一个带有构造函数的分部类,但是构造函数抛出错误,因为“已经声明了具有相同签名的成员”(另一个分部类中存在同名的构造函数)。当名称已被使用时,如何为分部类创建构造函数?
public partial class DigitalArchivesAssetsDataContext
{
public DigitalArchivesAssetsDataContext()
: base(System.Configuration.ConfigurationManager.ConnectionStrings["digitalArchivesAssets"].ConnectionString, mappingSource)
{
OnCreated();
}
}
Run Code Online (Sandbox Code Playgroud) partial-classes ×10
c# ×8
.net ×1
.net-3.5 ×1
asp.net ×1
c++ ×1
casting ×1
constructor ×1
facade ×1
interface ×1
iterator ×1
linq-to-sql ×1
nested-class ×1
nunit ×1
partial ×1
vector ×1
wsdl ×1