标签: dbcontext

DbContext.SaveChanges(); 不给出错误但不向数据库添加实体

我正在尝试使用以下代码将实体保存到我的数据库:

    public void Add(object entity)
        {
            DbContext.Entry(entity).State = System.Data.EntityState.Added;
            DbContext.SaveChanges();
        } 
Run Code Online (Sandbox Code Playgroud)

我测试过,如果出现问题(例如,实体的字段为空,在数据库中不能为空),则会出错.我填写了所有necesarry字段并调用了此代码.它没有给出错误.但是,该实体也未添加到数据库中.我怎样才能找到DbContext.SaveChanges(); 没有错误信息会出错?

下面是调用Add()函数的代码.

  public void StoreElectronicSignatureType(ElectronicSignatureTypeModel model)
    {
        var RSA = new System.Security.Cryptography.RSACryptoServiceProvider();
        var parameters = RSA.ExportParameters(false);
        model.modulus = Convert.ToBase64String(parameters.Modulus);
        model.exponent = Convert.ToBase64String(parameters.Exponent);
        model.privatekey = RSA.ToXmlString(true);

        ElectronicSignatureType electronicSignatureType = new ElectronicSignatureType();
        Entity entity =  GetEntity(model.entity);
        electronicSignatureType.Entity = entity;
        electronicSignatureType.HashAlgorithm = model.hashAlgorithm;
        electronicSignatureType.Exponent = model.exponent;
        electronicSignatureType.Modulus = model.modulus;
        electronicSignatureType.Version = model.version;
        //electronicSignatureType.EntityId = entity.EntityId;
        electronicSignatureType.PrivateKey = StrToByteArray(model.privatekey);
        Add(electronicSignatureType);
    }
Run Code Online (Sandbox Code Playgroud)

c# linq savechanges dbcontext

3
推荐指数
1
解决办法
5324
查看次数

在数据库第一种方法中使用DbContext与Objectcontext定义数据注释

我使用与实体框架数据库的第一种方法,当我习惯使用的ObjectContext的数据库表被映射的默认模板工作,所以我用来创建#partial类&[MetadataType(typeof运算)以应用数据注解,,但是当我开始使用的DbContext代码生成模板来映射数据库表,我发现,它会在我的示范区创建.TT文件夹都被我发现,我可以直接申请数据注解到的.cs类本身,而不需要创建在objectcontext情况下的部分类.目前数据注释工作正常,但我的方法会导致我不知道的问题,我应该创建部分类,因为我曾经使用Objectcontext吗?BR

entity-framework objectcontext asp.net-mvc-3 dbcontext

3
推荐指数
1
解决办法
3456
查看次数

WCF保存EF 4.1项目抛出异常无法将项目添加到固定大小的类型数组中

我已经搜索了谷歌并且花了很多时间试图弄清楚我的WCF和客户端Windows窗体应用程序发生了什么.

我不断收到以下错误

"Unable to set field/property Ingredients on entity type Datalayer.UnitOfMeasure. See InnerException for details."
...
inner exception is 
"An item cannot be added to a fixed size Array of type 'Datalayer.Ingredient[]'."


Stack Trace - 
    at System.Data.Objects.Internal.PocoPropertyAccessorStrategy.<AddToCollection>b__0[T](Object collectionArg, Object item)
       at System.Data.Objects.Internal.PocoPropertyAccessorStrategy.CollectionAdd(RelatedEnd relatedEnd, Object value)
Run Code Online (Sandbox Code Playgroud)

我配置我的解决方案的方式我有一个引用我的DataLayer类库的WCF Web服务,我有一个Windows应用程序(测试应用程序),它引用了WCF服务以及DataLayer项目.

如果我没有在我的测试应用程序中引用DataLayer,则不会发生此问题,但是我会丢失ICollection<Ingredient>到简单Ingredient[]数组.现在你可以看到,每次初始化数组都会成为编码的痛苦.

任何想法的人?提前致谢.

wcf savechanges entity-framework-4 dbcontext

3
推荐指数
1
解决办法
3597
查看次数

生成DbContext后如何修改数据库?

现在我已经通过以下方式从现有数据库生成了19个代码优先类:

  • 创建模型优先实体,并选择"从数据库生成"
  • 右键单击并选择"添加代码生成项"
  • EF 4.x DbContext Generater

我想要的所有课程都已生成,我对他们非常满意......

现在我的问题

  • 为什么它们都是生成的.cs文件嵌套在密封的.tt集合中?
  • 为什么我不能将它们复制粘贴到我喜欢的任何文件夹中,并像普通类一样对待它们?
  • 它只是我,或者当你这样做时,你是否无法使用迁移"update-database"?

我想我的整体问题是,为什么它们位于.tt文件夹中?我现在该如何更新我的数据库?通过手动编辑数据库然后更新Model,然后再次生成dbContext?或者是否有从.tt文件夹中获取.cs文件的技巧?

如何修改你的数据库生成您的DbContext后?

c# asp.net-mvc entity-framework ef-code-first dbcontext

3
推荐指数
1
解决办法
484
查看次数

仅使用一个上下文使用DbContext

在我的最新项目中,我认为在整个应用程序中只有一个上下文可能更简单.我注意到当我加载一个需要多个查询的页面时,它可能会返回空结果.

例如,我有一份约会清单,然后是销售代表清单.他们表现得很好.然后我点击F5,有时一切都会保持良好,但有时约会和/或代表列表将是空的.

这是单个上下文应用程序的已知问题吗?那个设计不好吗?

c# asp.net-mvc entity-framework dbcontext

3
推荐指数
1
解决办法
1790
查看次数

DbContext如何初始化自动DbSet <T>属性?

考虑以下课程:

class MyContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并实例化一个新对象:

var mycontext = new MyContext();
Run Code Online (Sandbox Code Playgroud)

为什么mycontext.Orders不为null?什么时候初始化?谁初始化了它?我真的很困惑,因为基类(DbConetxt)无法访问派生类属性,因此不可能在基础对象中初始化自动属性.

dbcontext entity-framework-5 dbset

3
推荐指数
1
解决办法
1424
查看次数

在处理DbContext时使用EntityFramework导航属性

我的Service类(在ASP.NET MVC应用程序中)中的当前检索模式如下所示:

public Client Get(int id)
{
    using (var repo = _repoFactory.Get<Client>())
    {
        return repo.Get(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

_repoFactory.Get<T>()返回贮藏库,配置时,还部署了实体框架DbContext;

但是,当Get(int id)方法的使用者需要在Client对象上使用导航属性时,会抛出异常,因为已经处理了上下文.

我可以预见几种方法来协商这个问题:

  • 不要在服务之外使用导航属性
  • 不要使用延迟加载导航属性
  • 找到一些在请求完成时处理上下文的方法

什么是"正确"(或最不正确)的方式以及如何实现?

c# entity-framework idisposable dbcontext

3
推荐指数
1
解决办法
1176
查看次数

FakeItEasy DbSet/IQueryable <T> - 实体框架6

我想知道是否有人在FakeItEasy 这篇文章中有类似的例子(原帖是在这里.我一直试图找到正确的设置,但无法正确.我在网上找不到任何例子.我开始教我自己单元测试,我决定使用FakeItEasy.到目前为止,我所有的项目都使用实体框架而不使用Repository/UOW模式,因为我认为DbSet和DbContext足以满足我的小规模应用程序.我明白有利可图EF和单元测试,但我仍然想知道这一点.我很确定我的尝试(见下文)我已经离开了,因为我得到的错误是

System.NotImplementedException:成员'IQueryable.Provider'尚未在类型'DbSet 1Proxy' which inherits from 'DbSet1'上实现.'DbSet`1'的测试双精度必须提供所使用的方法和属性的实现.

任何方向都会非常有帮助.谢谢.

var data = new List<Request> 
{ 
request1, 
request2, 
request3
}.AsQueryable();

var fakeDbSet = A.Fake<DbSet<Request>>();

A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Provider).Returns(data.Provider);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Expression).Returns(data.Expression);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).ElementType).Returns(data.ElementType);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).GetEnumerator()).Returns(data.GetEnumerator());

var fakeContext = A.Fake<RequestPortalContext>();
A.CallTo(() => fakeContext.Requests).Returns(fakeDbSet);

var service = new RequestReadService(fakeContext);
var requests = service.GetAllRequests();

Assert.AreEqual(3, requests.Count);
Assert.AreEqual("Test1", requests[0].Name);
Assert.AreEqual("Test2", requests[1].Name);
Assert.AreEqual("Test3", requests[2].Name);
Run Code Online (Sandbox Code Playgroud)

unit-testing fakeiteasy dbcontext dbset entity-framework-6

3
推荐指数
1
解决办法
4278
查看次数

EF DBConfiguration自动关联到DBContext,无需注释

将最新的EF(6.1.1)和EF用于SQL Server Compact(6.1.1),将其引入Compact 4.0。目标是净4.5.1

希望对我的EF进行编码,然后再与StructureMap一起使用。创建了一个DbConfiguration类:

 public class MyConfiguration : DbConfiguration
 {
   SetDatabaseInitializer<MyContext>(new MyInitializer());
   SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
                            SqlCeProviderServices.Instance);
 }
Run Code Online (Sandbox Code Playgroud)

和上下文:

 public class MyContext : DbContext
 {
   public MyContext(String connection) : base(connection) {}
   ....
 }
Run Code Online (Sandbox Code Playgroud)

使用XUnit我运行:

 using (var ctx = new MyContext(String.Format("Data Source={0}", Path.Combine(databasePath, databaseName)))) {
   ctx.Database.Initialize(true)
 }
Run Code Online (Sandbox Code Playgroud)

测试用例成功创建了Compact数据库(并通过初始化程序植入了种子)。但是在幕后发生了很多我不了解的隐性事情。

例如,我不需要在MyContext类上使用以下注释:

 [DbConfigurationType(typeof(MyConfiguration))]
Run Code Online (Sandbox Code Playgroud)

EF必须足够聪明才能看到我有一个MyConfiguration类来扩展DbConnection并使用它。要么?我还可以一起删除MyConfiguration,并且测试用例仍将生成一个数据库(显然没有种子)。怎么样?

我希望能够使用代码将DbConfiguration分配给特定的DbContext,而无需通过静态操作:

 static MyContext()
 {
   DbConfiguration.set(new MyConfiguration());
 }
Run Code Online (Sandbox Code Playgroud)

原因是也要与StructureMap使用不同的“配置文件”。有任何想法吗?

c# entity-framework dbcontext

3
推荐指数
1
解决办法
7630
查看次数

ASP .NET实体框架核心无法访问已处置的对象

为了进入.NET Core,我创建了一个WEB API,该API可以上传文件,然后将文件中的事务保存到DB表中。我正在使用.NET Core 2和Entity Framework Core。我使用此处的示例创建了上下文。

我的问题是,当尝试将其保存到我的存储库中的上下文对象时,出现错误“ System.ObjectDisposedException无法访问已处置的对象”。这是一个简单的堆栈,所以我希望有人可以帮助我。

我的容器设置如下所示:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<SyncFinContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddScoped<ITransactionProcessor, TransactionProcessor>();
        services.AddScoped<ITransactionRepository, TransactionRepository>();
    }
Run Code Online (Sandbox Code Playgroud)

我的DBInitializer也从上面的链接中获得:

public static class DbInitializer
{
    public static async Task Initialize(SyncFinContext context)
    {
        await context.Database.EnsureCreatedAsync();

        // Look for any students.
        if (context.Transactions.Any())
        {
            return;   // DB has been seeded
        }

        var ts = new Transaction[]
        {
            // insert test data here
        };

        await context.SaveChangesAsync();
    }
}   
Run Code Online (Sandbox Code Playgroud)

我的数据库上下文:

public class SyncFinContext : DbContext
{
    public …
Run Code Online (Sandbox Code Playgroud)

dependency-injection ioc-container dbcontext entity-framework-core asp.net-core

3
推荐指数
2
解决办法
3165
查看次数