LINQ إلى SQL Int16 يحصل تحويل كما Int32 في قيادة SQL
-
06-07-2019 - |
سؤال
ومع المعلمة طريقة
Int16? id
وعلى LINQ إلى SQL حيث شرط
where !id.HasValue || m.Id == id
وهذا نص الأمر مما أدى لحالة في سياق البيانات
ومن متخيل:
SELECT [t0].[Id], [t0].[Name], [t0].[IsActive]
FROM [Model] AS [t0]
WHERE (CONVERT(Int,[t0].[Id])) = @p0
-------------------------------
@p0 [Int32]: 5
وصفي معين لديه معرف على أنه Int16 وقاعدة البيانات نفسها لديها نوع العمود باعتباره صحيح صغير، لذلك لماذا وراء الكواليس SQL أعتقد أن المعلمة هي عدد صحيح (Int32) وليس صحيح صغير (Int16) <؟ / P>
ورسم الخرائط العمود:
[Column(IsPrimaryKey = true, DbType="SmallInt NOT NULL", CanBeNull=false)]
public Int16 Id { get; set; }
المحلول
وتغيير حيث شرط لقراءة
where !id.HasValue || m.Id == id.Value
وهناك شيء حول القصير قيم الفارغة التي يتم رميها بعيدا. لست متأكدا لماذا، لكنني واجهت هذا من قبل، ووجدت مضيفا أن .Value
العمل.
نصائح أخرى
وهممم ... لقد لاحظت أنك لا تحصل على أي تمثيل! id.HasValue في مزود. ولعل هذا هو نوع من الخداع المتعلقة بذلك الحصول على ملفوفة؟ يبدو زائفة لي، ولكن الشيء الوحيد الذي يمكنني أن أفكر.
لا تنتمي إلى StackOverflow