簡體   English   中英

Microsoft Entity Framework 不保存更改

[英]Microsoft Entity Framework is not saving changes

我目前正在嘗試使用 dbfactory 和 microsoft EF 的泛型來實現 CRUD 功能,但是雖然列出條目正在工作,但對 db 的更改目前無法正常工作。

 public class AbstractDataModel
    {
        [Key]
        public Guid gid { get; set; }
    }

模型

class SalesOrder : AbstractDataModel
{
    public int salesOrderID { get; set; }
    public int productID { get; set; }
    public int customerID { get; set; }
    public Guid createdBy { get; set; }
    public string dateCreated { get; set; }
    public string orderDate { get; set; }
    public string orderStatus { get; set; }
    public string dateModified { get; set; }
}

除了此處列出的功能之外,還有一些其他功能的 DBCore,這些功能與工廠無關

 public class DBCore : DbContext
    {
    public static string connectionString = "myConnectionStringToDb";

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(connectionString);
    }

調用工廠的數據服務

class SalesOrderService : DBCore
{
    public DbSet<SalesOrder> SalesOrders { get; set; }

    public OkObjectResult GetAllSalesOrders()
    {
        DBFactory factory = new DBFactory();
        return new OkObjectResult(JsonConvert.SerializeObject(factory.GetAll(SalesOrders)));
    }

    public OkObjectResult AddSalesOrder(SalesOrder order)
    {
        order.gid = Guid.NewGuid();
        return DBFactory.AddOne(order);
    }
    public OkObjectResult UpdateSalesOrder(SalesOrder order)
    {
        return DBFactory.UpdateOne(order);
    }
    public OkObjectResult DeleteSalesOrder(SalesOrder order)
    {
        return DBFactory.DeleteOne(order);
    }    
}

簡單的 CRUD 工廠,

       class DBFactory : DBCore
{
    public DbSet<UserModel> Users { get; set; }
    public DbSet<SalesOrder> SalesOrders { get; set; }

    public List<T> GetAll<T>(DbSet<T> dbset) where T : class
    {
        using (this)
        {
            return dbset.ToList();
        }
    }
    public static OkObjectResult AddOne<T>(T data)
    {
        using (DBFactory factory = new DBFactory())
        {
            factory.Add(data);
            factory.SaveChanges();
            return new OkObjectResult("Entry was sucessfully added");
        }
    }
    public static OkObjectResult UpdateOne<T>(T data) 
    { 
        using (DBFactory factory = new DBFactory())
        {
            factory.Update(data);
            factory.SaveChanges();
            return new OkObjectResult("Entry was sucessfully updated");
        }
    }
    public static OkObjectResult DeleteOne<T>(T data)
    {
        using (DBFactory factory = new DBFactory())
        {
            factory.Attach(data);
            factory.Remove(data);
            factory.SaveChanges();
            return new OkObjectResult("Entry was sucessfully removed");
        }
    }
}

編輯:按照建議我更改了代碼,因此它應該為工廠保存更改,其中還包含上下文作為屬性。 但它似乎仍然不適用於所有數據庫操作,除了列出所有條目

Editv2:感謝您的建議,我似乎已經解決了這個問題,但是出現了一個新問題:DI 現在可以執行數據庫操作,例如刪除條目,但是現在我無法再列出條目,因為出現以下錯誤,盡管那里的代碼並沒有真正實現改變:

“已執行‘GetAllOrders’(失敗,Id=5fb95793-572a-4545-ac15-76dffaa7a0cf,持續時間=74ms)[2020-10-23T14:33:43.711] System.Private.CoreLib:NewsoftOrders function 時執行異常Json:檢測到屬性“Context”的自引用循環,類型為“FicoTestApp.Models.SalesOrder”。路徑“[0].ChangeTracker”。”

嘗試添加

services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

給你的

啟動文件

它應該工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM