我正在将模型类重新分解为一个接口。使用Linq-to-Sql自动生成模型类。
class FooRepository
{
// ...
public void Add(IFoo foo)
{
db.Foos.InsertOnSubmit(foo);
}
}
InsertOnSubmit方法接受Foo的实例,而不是IFoo。我可以将实例内联到(Foo),这样可行,但是有更简洁的方法吗?
我已经在使用StructureMap,我可以在Add方法中添加一个属性来根据我的映射来解析类型吗?
或者我可以覆盖任何模型类方法,或使用部分事件来完成此操作吗?
答案 0 :(得分:1)
为了将DLINQ模型与控制器分开,我倾向于不传递LINQ模型,而是使用控制器使用的不同模型,在调用DLINQ方法之前将其传递给我的类。
这样我可以在我的控制器中获得应用程序所需的属性,即使数据库中可能有许多其他属性。
这样,如果数据库结构只改变了DAO类,比如FooRepository,就必须改变,其他一切都不受涟漪效应的影响。
我不知道你是否想要做这样的事情,但它比使用我期望的接口更简单。
答案 1 :(得分:0)
Dunno,如果这适合,但也许使用genrics可能是一个想法?
class FooRepository<T>
where T: class, IFoo, new()
{
// ...
public void Add(T foo)
{
db.Foos.InsertOnSubmit(foo);
}
}
你可以这样做 -
Foo bar = new Foo();
FooRepository<Foo> foo = new FooRepository<Foo>();
bar.Add(bar);
或者这......
Bar bar = new Bar(); //Bar implements IFoo
FooRepository<Bar> foo = new FooRepository<Bar>();
bar.Add(bar);
这样,FooRepository中的T实际上是一个Foo(或一个Bar),而不是一个IFoo,所以不需要强制转换,但where子句中的限制意味着它必须实现IFoo,Foo(和Bar)就是这样做的