visual studio que para net framework descargar data aparece agregar c# .net entity-framework

c# - studio - no se puede agregar la vista al edmx



no me aparece ado.net entity data model (4)

Cuando se intenta agregar una vista al archivo edmx, no sucede nada.
Abrí el archivo edmx usando el editor wxl y noté el siguiente error:

advertencia 6013: la tabla / vista ''CellularOrders.dbo.V_LINK'' no tiene una clave primaria definida y no se puede inferir una clave primaria válida. Esta tabla / vista ha sido excluida. Para usar la entidad, deberá revisar su esquema, agregar las claves correctas y descomentarlo.

(cosa importante: no lo hice y no necesito agregar la tabla en la que se basa la vista a edmx. Además, la vista es solo para hacer declaraciones selectas en los datos)

Así que en la base de datos, actualicé la tabla T_LINK e hice uno de los campos que se refleja en la vista como clave principal. Y luego, cuando volví a intentar agregar la vista al edmx, no vuelve a pasar nada.

¿¿Como puedo resolver esto?? ¿Hay una opción para solucionar esto sin hacer nada a la mesa? ¿Puedo agregar otra vista que de alguna manera envuelva la vista anterior pero con propiedades fijas?


Cada tabla o vista agregada al modelo de entidad debe tener alguna clave. En realidad, no tiene que ser la clave principal. Si la tabla no tiene la clave primaria definida, EF intentará inferir una clave mediante una regla simple: tomará todas las columnas no binarias no computables que no admiten nulos y las marcará como una clave de entidad. Si no existe tal columna, la entidad no se puede agregar automáticamente y el diseñador lanzará la advertencia mencionada. La solución es agregar la vista manualmente y seleccionar la clave, pero una vez que lo haga, no podrá usar Actualizar desde la base de datos porque siempre sobrescribirá sus cambios.

Su clave definida debe ser única; de lo contrario, puede tener otros problemas relacionados con el mapa de identidad que se usa internamente.


Puede resolver fácilmente este problema uniendo su vista con cualquier tabla arbitraria con una columna primaria. Solo asegúrate de que solo tomas una fila de la mesa.

Aquí hay un ejemplo:

CREATE VIEW dbo.myView AS SELECT -- This column enables EF-import via designer by enabling PK generation Id, -- These columns belong to the view [Count], [Sum] FROM ( SELECT COUNT(*) AS [Count] ,SUM(1) AS [Sum] FROM dbo.myTable ) TheViewItself -- Grab a primary key of a single row from atable INNER JOIN (SELECT TOP 1 Id FROM dbo.TableWithPrimaryKey) Id ON 1 = 1

El predicado de unión "ON 1 = 1" se ve extraño. Pero necesitaba esto para convencer a EF de importar la vista.


Solo agregue una columna a su vista. Agregué un Número de Fila para crear una clave como esta.

SELECT ISNULL(CAST((row_number() OVER (ORDER BY tab.ENTRYDATE)) AS int), 0) AS EDMXID,...other columns go on

la expresión de la pestaña es alias de tabla y la fecha de entrada es solo un campo necesario para row_number integrado en la función sql-server.

Usted puede elegir diferentes maneras, por ejemplo,

select newid() as MYEDMXID,....so on

Esperanza ayuda


Use una nueva tabla solo para vincular con sus vistas, si tiene más de 100k filas, EF6 no es su mejor solución;)

CREATE TABLE dbo.TablePrimate(Id int CONSTRAINT PK_TablePrimate PRIMARY KEY (Id)) go set nocount on; DECLARE @i int; set @i=1 WHILE @i<10000 BEGIN INSERT dbo.TablePrimate(Id) values(@i) SET @i = @i + 1 END --In fews seconds & 1 MB of storage GO

Ahora se une con "MyView"

CREATE VIEW dbo.vwTickets AS SELECT TP.Id, MyPKView.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY Ticket) Line, MyView.* FROM ( select Grupo, App, Ticket, Titulo, FApertura, Estado, Tipo from dbo.vwEvolutivos union select Grupo, App, Ticket, Titulo, FApertura, Estado, Tipo from dbo.vwIncidencias ) MyView ) MyPKView JOIN dbo.TablePrimate TP ON TP.Id = Line