Using Effort (EF Testing Tool) with Computed Column

一个人想着一个人 提交于 2020-01-04 04:15:11

问题


I have a number of integration tests which access the DB directly - create test prerequisite objects - performs the tests and then cleans up afterwards - however I wonted to try out the same approach in-memory.

I have just used Effort in my project and it works very easily. However I've hit a problem that I have been trying - but unable to solve.

One of the tables that I need filled up with dummy data - as a test prerequisite - contains a computed column (nvarchar, not null). For the scope of the test I really don't care about that column's value - but even if I try to insert dummy data, my data is ignored and then I get hit with an error:

"Column 'x' cannot be null. Error code: GenericError"

In my tests I am using the same edmx file as is used by the actual code. This prevents me from constantly updating the edmx copy.

Is there a way in which I can force the test to update the edmx (at runtime) so that column is a nullable non-computed column? [overriding OnModelCreating] or is there way to insert a default value (anything goes for this column) to stop this error? [overriding SaveChanges]

I have currently tried the following:

  • Attaching the objects using .Attach() instead of .Add()
  • Setting the EntityState to Unchanged after adding
  • Forcing the value through Entry.OriginalValues [this values since entity is in Added state]

Edit:

I have tried overriding the OnModelCreating method, but to no avail since this is DB-First.

modelBuilder.Entity<Entity_Name>().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

回答1:


Open your EDMX file in XML editor, find your entity under the StorageModels, and add to the column definition StoreGeneratedPattern="Computed".

But if you update or delete and add that table you will loose this modification. Actually you can write console app that will update you edmx file and add StoreGeneratedPattern="Computed" where needed and you can add those app to prebuild events in studio.




回答2:


The reason of the problem was a bug in the Effort database. When the computed column is based on non-nullable columns, the computed column would also automatically become non-nullable. Therefor, the Effort database was expecting a non-null value. With the latest update the problem is resolved. You have to set the global EntityFrameworkEffortManager.UseDefaultForNotNullable flag as true.

See the issue on github



来源:https://stackoverflow.com/questions/28232210/using-effort-ef-testing-tool-with-computed-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!