我尝试为成员实体创建主键,我不想使用注释,只需使用流畅的API:
Member{
public string MemberID {get;set;}
...
}
在MemberMapping中
this.hasKey(t=>t.MemberID);
更新数据库时出现此错误:
Identity column 'MemberID' must be of data type int, bigint, smallint, tinyint, or decimal or numeric with
a scale of 0, and constrained to be nonnullable
答案 0 :(得分:2)
EF支持string
作为PK,但是当您需要创建Member
的实例并将其保存到数据库中时,必须明确设置该属性的值。默认情况下,EF中唯一的identity类型为int
。为了解决您的问题,我认为您有两种选择:
MemberID
列更改为Identity
。这应该可以解决问题。如果您希望EF为您做更改,请添加此配置:
this.hasKey(t=>t.MemberID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
使用Add-Migration
命令创建新迁移,并尝试再次运行Update-Database
命令。
现在,如果您的数据库中的MemberID
列不是Identity
,并且您尝试在模型中将Identity
PK属性设置为MemberID
,那么可能是你问题的原因。如果是这种情况,请删除该配置并尝试再次运行Update-Database
命令。
来自Programming Entity Framework Code First的书,第44页:
如果密钥字段是
Integer
,则代码优先默认为DatabaseGeneratedOption.Identity
。使用Guid
,您需要明确 配置这个。 这些是您可以配置的唯一类型 Code First正在生成数据库时Identity
。
答案 1 :(得分:1)
问题不是PK而是身形。你应该有像
这样的东西plt.plot(0, 0)
plt.tick_params(
axis='both',
which='both',
bottom='off',
top='off',
left='off',
right='off',
labelleft='off',
labelbottom='off',
labelsize=8)
a = plt.axes([.36, .2, .6, .6])
plt.tick_params(
axis='both',
which='both',
labelsize=8)
a.spines['left'].set_position('center')
a.spines['bottom'].set_position('center')
a.spines['right'].set_color('none')
a.spines['top'].set_color('none')
a.xaxis.set_ticks_position('bottom')
a.yaxis.set_ticks_position('left')
plt.plot(x,y1, 'g--',label='m$_{1}$=' +str(mass1)+'M$_{\odot}$')
plt.plot(x,y2, 'b--',label='m$_{2}$=' +str(mass2)+'M$_{\odot}$')
plt.plot(x,y1n, 'g--')
plt.plot(x,y2n, 'b--')
plt.plot(start1[0],start1[1], 'xr',label='Position at \ntime t=0')
plt.plot(start2[0],start2[1], 'xr')
plt.plot(stop1[0],stop1[1], 'og', label='Position at \ntime t=' + str(t) + ' yr')
plt.plot(stop2[0],stop2[1], 'og')
plt.text(-75,-10, r'Binary period ' + str(period(m1+m2,a1+a2)) + 'yr',fontsize=8)
plt.text(-75,-15, r'm$_{1}$ period ' + str(period(m1,a1)) + ' yr',fontsize=8)
plt.text(-75,-20, r'm$_{2}$ period ' + str(period(m2,a2)) + ' yr',fontsize=8)
plt.text(-75,-25, r'a$_{1}$ = ' + str(a1) + ' AU', fontsize=8)
plt.text(-75,-30, r'b$_{1}$ = ' + str(sigfigs(LOSorbit(0,a1))) + ' AU',fontsize=8)
plt.text(-75,45, 'Apparent Orbits of Circular Binary System', fontsize=8, fontweight='bold')
plt.text(-75,-35, r'a$_{2}$ = ' + str(a2) + ' AU', fontsize=8)
plt.text(-75,-40, r'b$_{2}$ = ' + str(sigfigs(LOSorbit(0,a2))) + ' AU',fontsize=8)
plt.xlabel('x /AU', fontsize=8)
h = plt.ylabel('y /AU', fontsize=8)
h.set_rotation(0)
a.xaxis.set_label_coords(1.06, 0.54)
a.yaxis.set_label_coords(0.55, 1.01)
plt.savefig('binary_sys.pdf', bbox_inches='tight')
plt.grid()
box = a.get_position()
a.set_position([box.x0, box.y0, box.width * 0.8, box.height])
a.legend(numpoints=1,loc='center left',bbox_to_anchor=(-0.46, 0.75),prop={'size':8})
plt.show()