Entity framework ef代码首次将id增加1
我正在使用EF更新我的数据库 这是我的模型:Entity framework ef代码首次将id增加1,entity-framework,ef-code-first,Entity Framework,Ef Code First,我正在使用EF更新我的数据库 这是我的模型: //Resource public long ResourceId { get; set; } public string Name { get; set; } public string Descritption { get; set; } public string UserId { get; set; } public int ResourceTypeId { get; set; } pu
//Resource
public long ResourceId { get; set; }
public string Name { get; set; }
public string Descritption { get; set; }
public string UserId { get; set; }
public int ResourceTypeId { get; set; }
public byte[] Data { get; set; }
public bool IsEnabled { get; set; }
public bool Approved { get; set; }
public System.DateTime DateCreated { get; set; }
public virtual ICollection<MetaData> MetaDatas { get; set; }
//MetaData
public long MetaDataId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string LanguageCode { get; set; }
public string UserId { get; set; }
public System.DateTime DateCreated { get; set; }
public virtual ICollection<ResourceMetaList> ResourceMetaLists { get; set; }
public virtual ICollection<Resource> Resources { get; set; }
//资源
公共长资源ID{get;set;}
公共字符串名称{get;set;}
公共字符串描述{get;set;}
公共字符串用户标识{get;set;}
public int ResourceTypeId{get;set;}
公共字节[]数据{get;set;}
公共布尔值已启用{get;set;}
公共布尔批准{get;set;}
public System.DateTime DateCreated{get;set;}
公共虚拟ICollection元数据{get;set;}
//元数据
公共长元数据ID{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串语言代码{get;set;}
公共字符串用户标识{get;set;}
public System.DateTime DateCreated{get;set;}
公共虚拟ICollection ResourceMetaLists{get;set;}
公共虚拟ICollection资源{get;set;}
是什么使metadataid在每次添加新元数据时增加1?
我希望能够添加具有特定id的元数据
资源和元数据之间有一个ConnectionTable,其中每个资源和元数据的id都将它们连接起来。因此,我希望能够为每个资源添加一个特定的元数据,但现在它每次都给它一个新的id,因此连接到每个资源的元数据并不完全相同,而是每次都有一个新的元数据
编辑
也许问题不在于我如何建模数据库,而在于我如何用数据更新数据库?
资源和元数据之间有一个连接表,我要更新的是该表,而不是元数据表本身。但是connectiontable本身没有一个模型类,但是我存在于数据库中。如何仅更新该表
编辑2
3个箭头指向看起来相同的行,它们都应该是同一行,但连接到左侧表中的不同资源 添加键属性
[Key]
public long MetaDataId { get; set; }
您需要切换默认标识映射的设置
或者使用注释
[DatabaseGenerated(DatabaseGenerationOption.None)]
int id {get;set;}
您可以在EF中定义和使用多对多关系,无论您是,还是 如果你在谷歌上搜索“EF多对多关系”,这方面的信息会很多
如果您使用此EF关系,您可以让EF生成ID,它将为您修复关系,并自动管理关系表。要添加/删除关系,您可以使用
ChangeRelationshipState
例如,如果要添加元数据10、12、19和资源3之间的关系
你可以这样做
using (var db = new AppContext())
{
var r3 = new Resource { ResourceId = 3 };
var m10 = new Metadata { MetadataId = 10 };
var m12 = new Metadata { MetadataId = 12 };
var m19 = new Metadata { MetadataId = 19 };
db.Entry(r3).State = EntityState.Unchanged;
db.Entry(m10).State = EntityState.Unchanged;
db.Entry(m12).State = EntityState.Unchanged;
db.Entry(m19).State = EntityState.Unchanged;
var manager = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager;
manager.ChangeRelationshipState(r3, m10, h => h.Metadatas, EntityState.Added);
manager.ChangeRelationshipState(r3, m12, h => h.Metadatas, EntityState.Added);
manager.ChangeRelationshipState(r3, m19, h => h.Metadatas, EntityState.Added);
db.SaveChanges();
}
无法解析databasegenerationoptin,我需要什么引用?命名空间:System.ComponentModel.DataAnnotations.Schema程序集:System.ComponentModel.DataAnnotations(在System.ComponentModel.DataAnnotations.dll中)的可能重复项