Linq to sql Linq to SQL中的ASP.NET MVC查找表

Linq to sql Linq to SQL中的ASP.NET MVC查找表,linq-to-sql,orm,Linq To Sql,Orm,这确实是一个架构问题。我觉得我走错了方向,想要一些关于最佳实践的建议 假设我有一个Transactions表和一个TransactionTypes表。视图将提交在我的控制器中处理的适当事务数据。问题是控制器中的逻辑可能有点复杂,并且TransactionType不是由视图输入提供的,而是在控制器中计算的。(这可能是我问题的一部分) 例如,假设视图提交一个ViewModel,该ViewModel将映射到TransactionType的“撤回”。但是,控制器检测到需要将此更改为透支“因为资金不足。我

这确实是一个架构问题。我觉得我走错了方向,想要一些关于最佳实践的建议

假设我有一个
Transactions
表和一个
TransactionTypes
表。视图将提交在我的控制器中处理的适当事务数据。问题是控制器中的逻辑可能有点复杂,并且TransactionType不是由视图输入提供的,而是在控制器中计算的。(这可能是我问题的一部分)

例如,假设视图提交一个ViewModel,该ViewModel将映射到TransactionType的“撤回”。但是,控制器检测到需要将此更改为透支“因为资金不足。我不想做的是:

transaction.TypeId =
    DataContext.TransactionTypes.Single(x => x.type == "Overdraft").id;
…因为我将在代码中嵌入字符串文字。对吗

好的,我可以将这些值映射到强类型,这样我就可以做到:

class TranTypes
{
   public const long Deposit = 1;
   public const long Withdrawal = 2;
   public const long Overdraft = 3;
}

现在,如果我在数据库中的查找发生变化,我有一个地方可以更新映射,我的控制器仍然可以洞察模型

但这感觉也很尴尬

我觉得我真正想要的是Linq到SQL自动代码生成能够生成关联,这样我就可以引用强类型名称(存款、取款和草稿)请确保它将始终返回数据库中这些的当前值。在运行时对查找表所做的更改将导致问题,但看起来仍然非常干净

我应该消化什么来理解如何最好地构建它


提前感谢你扩展了我的大脑。:-

我一直喜欢的一种简单方法是枚举法

public enum TransactionType {
 Overdraft
}

transaction.TypeId =
    DataContext.TransactionTypes.Single(x => x.type == TransactionType.Overdraft.ToString()).id;
这很简单,但我喜欢

一种更复杂的方法(不确定这是否适用于LINQtoSQL,但更复杂的ORM支持它(如EF、DO.NET、LLBLGen等)是在数据模型中使用继承,并使用鉴别器

也就是说,有一个名为OverdraftTransactionType的TransactionType子类,该子类带有一个鉴别器(键),用于相互识别不同类型的TransactionType

随机链接:
不要担心是否有嵌入的字符串或强类型的值——这两者都是完全可以接受的——这对您的数据库设计是有意义的

然而,您应该做的是在存储库或帮助器类中编写一个例程,然后您可以从任何控制器或操作中调用它——如果有任何更改,那么只有一个地方可以进行更改

public enum TransactionType {
 Overdraft
}

transaction.TypeId =
    DataContext.TransactionTypes.Single(x => x.type == TransactionType.Overdraft.ToString()).id;