entity framework not working on table without identity column

.net c# entity-framework sql


I have the following table:

create table tbl
    id int identity(1,1),
    val varchar(100)

Now when i use Entity Framework to map objects to this table, it works, however when i change the table definition as follows:

create table tbl1
    id int,
    val varchar(100)

Entity Framework does not maps objects to this table. Any clue as to why is this happening would be appreciated.

10/16/2012 5:08:56 AM

Accepted Answer

Entity Framework requires a Primary Key to generate a model from the database. If there is no Primary Key on a table it will simply select the non-nullable columns as a concatenated primary key and the Entity will be read/only.

In your first table identity definition makes your id column non-nullable so you were able to create an Entity. You should have seen this message while adding that table:

"The table/view 'tbl1' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view."

In your second table however there is no non-nullable column and EF cannot create an Entity for it. See the message when you try to add it:

"The table/view 'tbl1' does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity, you will need to review your schema, add the correct keys, and uncomment it."

10/16/2012 4:56:11 AM

Popular Answer

Entity frameworks generally need a way to distinguish between two records in a table and so require a ID/Key discriminator which need not be a primary key constraint or a unique key constraint or an identity at the DB layer. But this discriminator, a column or a set of columns, should help the entity framework identify a record uniquely and distinguish it from other records. So, you need to define such a discriminator in your entity class at the C# layer.

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow