我们说我有以下代码:
public class TenantId
{
public Guid Id { get; protected set; }
public TenantId(Guid id)
{
Id = id;
}
}
public class Tenant
{
public TenantId Id { get; protected set; }
public string Name { get; set; }
public Tenant(TenantId id, string name)
{
Id = id;
Name = name;
}
}
有没有办法将TenantId映射为Entity Framework Code First中的Guid主键?
我尝试了以下内容:
modelBuilder.Entity<Tenant>()
.HasKey(m => m.Id );
和
modelBuilder.Entity<Tenant>()
.HasKey(m => m.Id.Id );
两者都编译,但都抛出运行时异常。前者说它是无效的类型(必须是标量,字符串或字节[])。后者抱怨表达无效,因为不是财产。
我还尝试添加从TenantId到Guid的隐式转换,没有运气,
答案 0 :(得分:1)
实体框架仅支持标量类型,字符串和byte []作为主键。您可以在Tenant类中移动属性Guid Id的最佳选择。如果您需要执行某些逻辑或使用密钥,那么您可以将此逻辑放在EntityBase类中,这是父租户:
public class EntityBase
{
public Guid Id { get; protected set; }
//logic with Id
}
public class Tenant : EntityBase
{
public string Name { get; set; }
}
答案 1 :(得分:-1)
我在这里找到了一种解决方案:https://www.devexpress.com/Support/Center/Question/Details/T141713
它工作但域实体会得到一些冗余的代码行。有没有人试图修改'dbcontext'的映射过程或更改EF的源代码?