Linq to sql 我可以让我的持久层对象实现一个使用enum并隐式转换为int的接口吗?

Linq to sql 我可以让我的持久层对象实现一个使用enum并隐式转换为int的接口吗?,linq-to-sql,enums,domain-driven-design,Linq To Sql,Enums,Domain Driven Design,我有一个域接口 public interface ITicket { ... TicketWorkflowStatus StatusId{get;set;} // Enum } 但是数据库上的linq到sql持久层想要使用int,我可以在dbml中更改它,使本地类型为TicketWorkflowStatus?我的选择是什么?域应该与持久性基础结构分离,并且在对域模型建模时,没有理由认为此基础结构可以强制执行这样的决策 在您的情况下,它是外部耦合 经验告诉-一旦你开始为你的ORM提供太多的服务,

我有一个域接口

public interface ITicket
{
...
TicketWorkflowStatus StatusId{get;set;} // Enum
}

但是数据库上的linq到sql持久层想要使用
int
,我可以在dbml中更改它,使本地类型为
TicketWorkflowStatus
?我的选择是什么?

域应该与持久性基础结构分离,并且在对域模型建模时,没有理由认为此基础结构可以强制执行这样的决策

在您的情况下,它是外部耦合


经验告诉-一旦你开始为你的ORM提供太多的服务,它会很快让你屈服。

我的领域以什么方式不脱离持久性?持久性可以附加/依赖于域,所以我不确定你在这里得到了什么?@Maslow E.g.-我认为99%的情况下,你选择使用接口抽象域实体是因为linq到sql,对吗?这是ORM骗你做的决定。这是一种隐式依赖。虽然从技术上讲持久性是分离的,但实际上根本不是。不,我选择在我的域上放置接口,以便任何其他层都可以实现DTO,并且映射代码是T4生成的。这样T4的用户就可以决定是通过业务层验证路由来自db的数据,还是直接传递回表示。DTO可以存在于表示中并被传递到业务中进行验证,然后被验证的业务对象可以被传递到持久性层。如果需要,持久化层可以使用相同的映射方法将这些业务对象推入持久化对象。这不是外部耦合吗?表示层、业务层和持久层使用定义实体形状的相同接口。对吗?事实上,我以前在项目同事的工作中见过这种情况。将您的TicketWorkflowStatus标记为显式继承自int的枚举。如
公共类enum TicketWorkflowStatus:int
。这可能是解决问题的最快方法(除非我错了)。您在ORM设计器中将对象的类型设置为枚举了吗?Linq to SQL理解如何进行枚举到Int和枚举到字符串的转换,只要指定类型(我认为如果没有T4工具箱,就必须使用全局:)