Iniciando una nueva aplicación con soporte de database

Estoy comenzando un nuevo proyecto de C # que usa una database, pero quiero que todo esté controlado por la versión. Estoy pensando en una database de SQL Server (si hago un file mdf, ¿podré usarlo en una computadora sin SQL Server instalado?) Y LINQ to SQL.

¿Cómo sueles comenzar un proyecto como este? ¿Crea un file .sql para crear la database y luego crea los models linq? ¿Hay una mejor manera?

Realmente depende de lo que prefieras. Obtendrá respuestas que le dicen que es mejor diseñar su model de objects primero (los progtwigdores le dirán eso) y luego hay aquellos que le dirán que primero diseñe su model de datos (los administradores de la database).

Al final, el path correcto es la forma en que te sientes más cómodo. Si siente que va a hacer la mayor parte de la manipulación de los datos en el código, entonces podría ser bueno para usted comenzar con el model de objects. Si cree que realizará la mayoría de las operaciones en datos, entonces sería bueno que empiece con la database.

Con respecto al control de fuente, si quieres versionar todo, entonces vas a tener que generar un file sql que tendrá lo que necesitas para crear tu database desde cero. Luego, cada vez que cambie o actualice el esquema de la database o los datos, también debe colocar ese file en el control de la fuente. También recomiendo una convención de nomenclatura que incorpore la date y la hora del file en el file, para que sea más fácil averiguar en qué order aplicar los files cuando se trabaja desde cero o en cualquier momento posterior.

Y, por supuesto, también necesita una versión de su código fuente, pero eso debería ser evidente.

Si usa un .mdf, sus usuarios necesitarán tener alguna versión de SQL Server. Para aplicaciones pequeñas, es posible que pueda usar el SQL Server Express (gratuito).

En cuanto a cómo diseñar su solución, esto puede ser difícil, pero su deseo de tener todo en control de la fuente es correcto. Con demasiada frecuencia, los desarrolladores no ponen su código de database en control de fuente, y esto siempre lleva a dolores de cabeza.

El problema es que la versión que controla una database puede ser complicada en Visual Studio. Simplemente poner scripts de cambio en una carpeta es difícil, porque debe recordar crearlos mientras diseña la database. Cosas simples como el cambio de nombre de campo, etc. pueden ser tediosas, ya que es importante hacerlas en el order correcto. Es posible que desee considerar un marco de migraciones como RikMigrations como un enfoque. Para aplicaciones más grandes, un proyecto de database de Visual Studio (requiere una nueva installation, pero recientemente disponible en el Sku de desarrollador de equipo) lo ayudará a controlar las versiones de los scripts de cambio de database, etc.

Primera pregunta: sí, siempre necesita tener el server sql instalado en su máquina para acceder a la database localmente; de ​​lo contrario, deberá configurar su server para que acepte conexiones externas.

Segundo: no, no debe almacenar el file MDF de la database bajo control de fuente. Como dijiste, almacena scripts sql en control de código fuente en su lugar.

Tercero: recomiendo observar un sistema de asignación de relaciones de object como FluentNHibernate y NHibernate para que no necesite administrar ninguna de sus bases de datos en sql que no sea la tabla real crear / modificar instrucciones e índices.