gpt4 book ai didi

linq-to-sql - LINQ + 类型表最佳实践

转载 作者:行者123 更新时间:2023-12-02 21:53:18 25 4
gpt4 key购买 nike

适用于 LINQ 和 SQL 中存在的类型表的最佳设计模式是什么。

我在 SQL 中有一些表将值限制为类型值,并且我希望能够在我的 C# 代码中将其用作强类型值。

我当前的“PackageStatus”类型方法如下:

SQL 表

PackageStatusType (int)
desc (varchar)

C# 类 - 使用 LINQ

public class PackageStatusType
{
static PackageStatusType()
{

var lookup = (from p in DataProvider.ShipperDB.PackageStatus
select p).ToDictionary(p => p.Desc);


Unknown = lookup["Unknown"];
LabelGenerated = lookup["Label generated"];
ReadyForCollection = lookup["Ready for pickup"];
PickedUp = lookup["Picked up"];
InTransit = lookup["In Transit"];
DeliveryAttempted = lookup["Delivery attempted"];
DeliveredByHand = lookup["By hand"];
DeliveryFailed = lookup["Delivery failed"];
Delivered = lookup["Delivered"];
Voided = lookup["Voided"];
}

public static ShipperDB.Model.PackageStatus Unknown;
public static ShipperDB.Model.PackageStatus LabelGenerated;
public static ShipperDB.Model.PackageStatus ReadyForCollection;
public static ShipperDB.Model.PackageStatus PickedUp;
public static ShipperDB.Model.PackageStatus InTransit;
public static ShipperDB.Model.PackageStatus DeliveryAttempted;
public static ShipperDB.Model.PackageStatus DeliveryFailed;
public static ShipperDB.Model.PackageStatus Delivered;
public static ShipperDB.Model.PackageStatus DeliveredByHand;
public static ShipperDB.Model.PackageStatus Voided;
}

然后,我可以将 PackageStatusType.Delivered 放入我的 C# 代码中,它将正确引用正确的 LINQ 实体。

这工作正常,但让我想知道:

a) 我怎样才能提高效率b) 为什么微软似乎没有提供任何东西来创建强类型类型表c) 我的数据库设计好吗?d) 其他人在做什么!

谢谢!

最佳答案

Linq to SQL 允许您将数据库中的字符串或 int 列映射到 C# 代码中的枚举。这允许您在从数据库中进行选择时让 Linq to SQL 为您映射这些值。在本例中,我会将包状态列更改为包含枚举值的 int 列或表示枚举值的字符串。

在您的情况下,我将有一个具有您指定的不同值的 PackageStatus 枚举,然后使用 ORM 设计器或 SQLMetal 将该列映射到该枚举。唯一需要注意的是,数据库列中的字符串值必须与枚举中的值匹配,因为 Linq to SQL 将使用 Enum.Parse() 将字符串值从数据库映射到枚举,或者确保 int 值数据库中的值与枚举中的值匹配。

这更加高效,因为您甚至不需要在代码中映射查找表。

http://msdn.microsoft.com/en-us/library/bb386947.aspx#EnumMapping描述了它是如何工作的。

关于linq-to-sql - LINQ + 类型表最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/118497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com