¿Por qué no puedo usar la base de datos establecida por defecto? -- sql-server campo con entity-framework camp Relacionados El problema

Why can't I use database set defaults?


0
vote

problema

Español

¿Por qué no puedo usar la base de datos establecida por defecto con el marco de entidades? Cuando diseñé mi base de datos, agregué los valores predeterminados apropiados (i.e. "Valor predeterminado o en el campo de encuadernación). Ahora parece que tengo que especificar esos predeterminados en mi código de todos modos, a menos que utilice StoreGeneratedPattern.Computed , pero no se me permite cambiar el valor más adelante. Si no especifico un valor predeterminado en código, obtengo una excepción.

Original en ingles

Why can't I use database set defaults with Entity Framework? When I designed my database, I added appropriate default values (i.e. "Default Value or Binding" field). Now it seems that I have to specify those default in my code anyway unless I use StoreGeneratedPattern.Computed but then I am not allowed to change the value later. If I don't specify a default value in code, I get an exception.

     

Lista de respuestas

0
 
vote

Hay alguna lógica aquí.

En su entidad, tiene PUBLIC INT PULTETINT {GET; colocar; }. Vamos a digamos que establece el valor predeterminado de la columna de ejemplo a 100.

Imagina la situación en la que se crea el objeto de la entidad. Es un objeto C # con los valores predeterminados que se están llenando por el tiempo de ejecución. Vencido se inicializa con el valor 0. En este momento, la entidad objeto no sabe nada de DB. Entonces decides ahorrarle a la entidad. EF tendrá que crear una fila y luego insertar los valores que especificó. ¿Pero espera? ¿Debería ser 0 o 100? El EF tendría que seguir si realizó un cambio en el campo, pero si crea un objeto de entidad, EF no está al tanto de ello hasta que lo adjunte / Guárdalo.

Solo una idea: ¿Qué sucede si se ejecuta en constructor una consulta para verificar el valor predeterminado? Esto funcionará como el momento en que creará el objeto, se llenará con el valor predeterminado. Si el objeto es creado por EF, ese valor se sobrescribirá por lo que tiene en DB. En realidad, tengo una mejor idea.

¿Por qué no usas fábrica para crear nuevos objetos de entidad? ¿La fábrica puede consultar el DB para el valor predeterminado? Todavía no es realmente agradable, pero mucho mejor que dirigir una consulta en Constructre. Entonces:

  public class ExampleFactory {    public static GetExample ()    {        // obviously you want to run it only once. This is example only.        int defaultValue = dbContext.Database.SQLQuery("SqlToGetTheDefaultValue");        return new Example { ExampleInt = defaultValue };    } }   

así que ahí vayas. Ahora sabes por qué EF no puede hacer esto. Y también te di (mala) idea, de cómo puedes abordar esto.

 

There is some logic here.

In your entity you have public int ExampleInt { get; set; }. Let say you set The default value of Example column to 100.

Imagine the situation where the entity object is created. It's a C# object with default values being filled in by the runtime. ExampleInt is initialized with value 0. At this time, entity object knows nothing about db. Then you decide to save the entity. EF will have to create a row and then insert the values you specified. But wait? Should this be 0 or 100? EF would have to track if you made a change to the field, but if you create entity object, EF is not aware of it until you attach it/save it.

Just an idea: What if you run in constructor a query to check the default value? This will work as the moment you create the object it will be filled with the default value. If the object is created by EF, that value will be overwritten by what you have in db. Actually, I got a better idea.

Why don't you use factory to create new entity objects? The factory can query the db for default value? It's still not really nice, but much better that running a query in constructre. So:

public class ExampleFactory {    public static GetExample ()    {        // obviously you want to run it only once. This is example only.        int defaultValue = dbContext.Database.SQLQuery("SqlToGetTheDefaultValue");        return new Example { ExampleInt = defaultValue };    } } 

So there you go. Now you know why EF can't do this. And I also gave you (bad) idea, of how can you tackle this.

 
 
     
     

Relacionados problema

14  Marco de entidades - Modelo de actualización de la base de datos ... - ¡No se produce ninguna actualización!  ( Entity framework update model from database no update happens ) 
Tengo una tabla en mi DB llamado CompanyDetails . Tiene una columna llamada CharacterID varchar(255) . Acabo de cambiarlo de una columna /// <summary> /// ...

2  Los comentarios de la entidad se eliminan al guardar el modelo actualizado  ( Entity comments are removed upon saving of updated model ) 
Para despejar: Yo uso el generador de POCO para que las entidades no estén atadas estrechamente a la implementación del EF. En mis entidades, tiendo a agr...

1  ¿Cómo definir el tipo de devolución en una función con LINQ?  ( How to define the return type in a function with linq ) 
Me gustaría saber cómo definir un TypeType en una función en siguiente situación. Tengo un producto y yo estaba devolviendo toda la información o un product...

3  ASP.NET MVC Models sin bases de datos / marco  ( Asp net mvc models without databases framework ) 
Hay algún tutorial / ejemplos sobre cómo crear una aplicación ASP.NET MVC sin que el modelo sea administrado por una base de datos (a través de Linq2SQL o Fra...

11  El marco de entidades no persistirá los datos en SQL Express (MDF)  ( Entity framework wont persist data in sql express mdf ) 
Estaba desarrollando una aplicación utilizando el marco de entidades y almacenando datos en una base de datos .MDF. Mi código puede leer los datos, aparenteme...

1  La mejor manera de adjuntar fila de DataGrid a EF  ( Best way to attach row from datagrid to ef ) 
Uso de MVVM y EF ... Tengo una unión de DataGrid a un modelo de vista (usando observableCollection). El modelo de vista tiene un comando Guardar que simplemen...

0  Cómo ansia carga en WCF RIA Services / Linq2SqldAnMainModel  ( How to eager load in wcf ria services linq2sqldomainmodel ) 
Tengo una cuadrícula de datos en mi opinión (XAML) y los puntos de arces en un informe de informes. La entidad de informes tiene tres primitivas y algunos tip...

16  ¿Cuál es el mejor libro para aprender LINQ, incluido LINQ a las entidades? [cerrado]  ( Which is the best book out there to learn linq including linq to entities ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

3  Cómo usar los datos dinámicos de ASP.NET con el marco de la entidad en otra DLL  ( How to use asp net dynamic data with entity framework in another dll ) 
¿Cómo puedo usar datos dinámicos ASP.NET utilizando EF en otro DLL y no quiero poner la cadena de conexión en Web.config o cualquier archivo de configuración?...

1  Servicios de RIA: los modelos de dos entidades comparten un nombre de entidad  ( Ria services two entity models share an entity name ) 
Tengo dos modelos de entidad conectados a dos bases de datos diferentes. Sin embargo, las dos bases de datos tienen una tabla llamada 'Marca', por ejemplo. Co...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos