0

我正在将模型类重构为接口。模型类是使用 Linq-to-Sql 自动生成的。

class FooRepository 
{
    // ...
    public void Add(IFoo foo) 
    {
        db.Foos.InsertOnSubmit(foo);    
    }
}

InsertOnSubmit 方法采用 Foo 的实例,而不是 IFoo。我可以将实例内联转换为 (Foo) 并且这有效,但是有没有更清洁的方法来做到这一点?

我已经在使用 StructureMap,我可以在 Add 方法中添加一个属性来根据我的映射解析类型吗?

或者我可以覆盖任何模型类方法,或者使用部分事件来完成这个吗?

4

2 回答 2

1

为了将 LINQ 模型与控制器分开,我倾向于不传递 LINQ 模型,而是使用控制器使用的不同模型,在调用 LINQ 方法之前将其传递到我的类中。

这样我就可以在我的控制器中拥有应用程序所需的属性,即使数据库中可能有许多其他可用的属性。

这样,如果数据库结构只需要更改 DAO 类(例如 FooRepository),则其他所有内容都不会受到连锁反应的影响。

我不知道你是否想做这样的事情,但它会比使用我期望的接口更简单。

于 2009-08-29T04:50:53.550 回答
0

不知道这是否适合,但也许使用泛型可能是一个想法?

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)会这样做。

于 2010-01-28T06:40:06.830 回答