1 回答

TA貢獻1824條經驗 獲得超5個贊
確實,smallint映射到int16又名Short。您可以在adonet 服務器數據類型映射處驗證它。至于發生了什么,請檢查 int16 equals 的文檔:“如果 obj 是 Int16 的實例并且等于該實例的值,則為 true;否則為 false。”?。
變量NDRAWING2也需要是int16 。在Javascript中,有運算符“===”來表示值和類型必須相同。
通過正確的抽象,使用 Microsoft.EntityFrameworkCore.InMemory 2.2.6 和 NUnit 3.2,我將:
在內存數據庫上下文中創建
添加上下文到服務
使用服務添加一些數據并將它們存儲到數據庫
驗證它在新上下文中是否有一些數據
使用服務查找我想要的數據
驗證它確實找到了數據
代碼示例:
class Program
{
? ? static void Main(string[] args)
? ? {
? ? ? ? var options = new DbContextOptionsBuilder<DtSkmContext>()
? ? ? ? ? ? .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
? ? ? ? ? ? .Options;
? ? ? ? using (var context = new DtSkmContext(options))
? ? ? ? {
? ? ? ? ? ? var service = new DtSkmService(context);
? ? ? ? ? ? service.Add(3, 7);
? ? ? ? ? ? context.SaveChanges();
? ? ? ? }
? ? ? ? using (var context = new DtSkmContext(options))
? ? ? ? {
? ? ? ? ? ? Assert.That(context.DtSkm.Count(), Is.EqualTo(1));
? ? ? ? ? ? var service = new DtSkmService(context);
? ? ? ? ? ? var result = service.Find(3, 7);
? ? ? ? ? ? Assert.That(result, Is.Not.Null);
? ? ? ? }
? ? }
}
服務
public class DtSkmService
{
? ? private DtSkmContext _context;
? ? public DtSkmService(DtSkmContext context)
? ? {
? ? ? ? _context = context;
? ? }
? ? public void Add(int ndrawing1, Int16 ndrawing2)
? ? {
? ? ? ? var dtSkm = new DtSkmDto { Ndrawing1 = ndrawing1, Ndrawing2 = ndrawing2 };
? ? ? ? _context.DtSkm.Add(dtSkm);
? ? ? ? _context.SaveChanges();
? ? }
? ? public IEnumerable<DtSkmDto> Find(int first, Int16 second)
? ? {
? ? ? ? return _context.DtSkm
? ? ? ? ? ? .Where(b => b.Ndrawing1.Equals(first) && b.Ndrawing2.Equals(second))
? ? ? ? ? ? .OrderBy(b => b.Ndrawing1)
? ? ? ? ? ? .ToList();
? ? }
}
和 dto 和上下文
public class DtSkmDto
{
? ? public int Id { get; set; }
? ? [Required]
? ? public int Ndrawing1 { get; set; }
? ? [Required]
? ? public Int16 Ndrawing2 { get; set; }
}
public class DtSkmContext : DbContext
{
? ? public DtSkmContext()
? ? {
? ? }
? ? public DtSkmContext(DbContextOptions<DtSkmContext> options) : base(options)
? ? {
? ? }
? ? public DbSet<DtSkmDto> DtSkm { get; set; }
}
雖然這使用 EF core 和內存數據庫,但它展示了一種實現方法。根據您的情況,您可以進行一些小的更改:
var data = dtSKM.AsEnumerable().ToList();
DataRow[] skmRows = data.Where(x =>
? ?x.Field<int>("NDRAWING1").Equals(NDRAWING1) &&
? ?x.Field<Int16>("NDRAWING2").Equals(NDRAWING2)
? ?).ToArray();
您可以使用調試器驗證數據實例類型/值。你的假設之一不成立,它不是“.NET 中的錯誤”。
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報