实体框架,将现有的数据库实体分配给另一个实体,而不创建新实体

时间:2017-07-31 04:29:14

标签: c# entity-framework

每次我想将db-entity分配给另一个时,我都会创建一个新的。

使用Entity Framework,首先编写代码,创建一个与Angular UI断开连接的restfull webapi服务。对于每个数据库实体,我还有一个Data obj来将结果数据发送到UI。

让我们考虑下一个例子

DB ENTITIES:

Client()
{
  int Id {get;set;}
  string Name {get;set;}
  CountriesDropDown Contry { get; set; }
}

CountriesDropDown()
{
  int Id {get;set;}
  string Description {get;set;}
}

CountriesDropDown是DB的固定列表,我不想创建新行或编辑它们,我只是想将它们分配给客户端。

是否有任何方法可以在ENTITY FRAMEWORK中设置这个DROPDOWN表,始终是EntityState.Unchanged ??

THEN:

SAVE()
{
.....
.....
if(Client.Contry != null)
  {
    Client.Contry.Id = ClientData.Contry.Id;
  }
else
  { //INSTEAD OF ASSIGN AN EXISTING COUNTRY IT CREATES A DUPLICATE ONE
    Client.Contry = new CountriesDropDown();
    Client.Contry.Id = ClientData.Contry.Id;
    Client.Contry.Description = ClientData.Contry.Description;
  }
}

1 个答案:

答案 0 :(得分:1)

这有两种方法。

首先在Client课程中有一个CountryId字段,并通过ForeignKeyAttribute将其与Country对象相关联 然后只需设置Id属性

Client.CountryId = clientData.CountryId

在查询数据时,您仍然可以访问导航属性

其次通过db上下文检索现有实体并附加

Client.Country = dbContext.Countries.Find(clientData.CountryId)