Blu*_*eft 11 c# mysql entity-framework
我的问题:在我的本地机器/ MySQL数据库上插入一组数据,但在生产时会导致Duplicate entry for key 'PRIMARY'
错误.据我所知,两个设置都是等价的.
我的第一个想法是它是一个整理问题,但我已经检查过两个数据库中的表都在使用utf8_bin
.
该表开始为空,我.Distinct()
在代码中,所以不应该有任何重复的条目.
有问题的表格:
CREATE TABLE `mytable` (
`name` varchar(100) CHARACTER SET utf8 NOT NULL,
`appid` int(11) NOT NULL,
-- A few other irrelevant fields
PRIMARY KEY (`name`,`appid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Run Code Online (Sandbox Code Playgroud)
Database.cs
:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class Database : DbContext
{
public DbSet<MyTable> MyTable { get; set; }
public static Database Get()
{
/* Not important */
}
//etc.
}
Run Code Online (Sandbox Code Playgroud)
MyTable.cs
:
[Table("mytable")]
public class MyTable : IEquatable<MyTable>, IComparable, IComparable<MyTable>
{
[Column("name", Order = 0), Key, Required, DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Name
{
get { return _name; }
set { _name = value.Trim().ToLower(); }
}
private string _name;
[Column("appid", Order = 1), Key, Required, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ApplicationId { get; set; }
//Equals(), GetHashCode(), CompareTo(), ==() etc. all auto-generated by Resharper to use both Name and ApplicationId.
//Have unit-tests to verify they work correctly.
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
using(Database db = Database.Get())
using(DbContextTransaction transaction = db.Database.BeginTransaction(IsolationLevel.ReadUncommitted))
{
IEnumerable<MyTable> newEntries = GetNewEntries();
//Verify no existing entries already in the table; not necessary to show since table is empty anyways
db.MyTable.AddRange(newEntries.Distinct());
}
Run Code Online (Sandbox Code Playgroud)
我不知道在.Distinct()
使用代码之后,在数据库中可能存在重复条目utf8_bin
,特别是因为它可以在一台机器上运行而不是在另一台机器上运行.有没有人有任何想法?
归档时间: |
|
查看次数: |
1096 次 |
最近记录: |