您好我想获得主键值。
Mary
had
1.0
little
lamb...
是否有使用Entity Framework获取主键的功能或方法?
答案 0 :(得分:1)
以下是几种解决方案:
1-您的实体继承自Base Class
哪个基类具有Id
属性,并且您使Look
方法通用:
public abstract class BaseEntity
{
protected BaseEntity()
{
}
public virtual int Id { get; set; }
}
public static void Look<TEntity>(LEBAEntities db, TEntity entity) where TEntity : BaseEntity {
if(entity.Id == 0)
db.Entry(entity).State = EntityState.Added;
else
db.Entry(entity).State = EntityState.Modified;
}
2-您可以通过反射使用GetProperties
方法并比较属性名称:
public static void Look(LEBAEntities db, object obj) {
var type = obj.GetType();
var key = type.GetProperties().FirstOrDefault(p =>
p.Name.Equals("ID", StringComparison.OrdinalIgnoreCase)
|| p.Name.Equals(type.Name + "Id", StringComparison.OrdinalIgnoreCase));
if(key == 0)
db.Entry(obj).State = EntityState.Added;
else
db.Entry(obj).State = EntityState.Modified;
}
3 - 您可以要求映射元数据以获取密钥:
public static void Look(LEBAEntities db, object obj) {
var type = obj.GetType();
var type = typeof (IdentityUser);
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
IEnumerable<string> retval = (IEnumerable<string>)objectContext.MetadataWorkspace
.GetType(type.Name, type.Namespace, System.Data.Entity.Core.Metadata.Edm.DataSpace.CSpace)
.MetadataProperties.First(mp => mp.Name == "Id")
.Value;
.
.
.